从 python 中的字符串中提取子字符串的正则表达式

regex to extract a substring from a string in python

我们如何在 python.

中使用 re 从字符串中获取以下子字符串
string1 = "fgdshdfgsLooking: 3j #123"
substring = "Looking: 3j #123"

string2 = "Looking: avb456j #13fgfddg"
substring = "Looking: avb456j #13"

尝试过:

re.search(r'Looking: (.*#\d+)$', string1)

试试,

re.search(r'Looking: (.)*#(\d)+', string1)

  1. 它将匹配“正在查找:”
  2. 之后它将查找 0 个或多个任意字符
  3. 之后是一个“#”
  4. 和 1 个或多个数字

您需要从正则表达式中删除 $

 re.search(r'Looking: (.*#\d+)', string1)

如果您还想要 re 到 return Looking,则必须将其用括号括起来:

 re.search(r'(Looking: (.*#\d+))', string1)

你的正则表达式大部分是正确的,你只需要删除 EOL(行尾)$ 因为在某些情况下 string2 该模式不以 EOL 结尾,并且有一些额外的模式结束后的字符串。

import re

string1 = 'fgdshdfgsLooking: 3j #123'
string2 = 'Looking: avb456j #13fgfddg'

pattern = r'Looking: (.*?#\d+)'

match1 = re.search(pattern, string1)
match2 = re.search(pattern, string2)

print('String1:', string1, '|| Substring1:', match1.group(0))
print('String2:', string2, '|| Substring2:', match2.group(0))

输出:

String1: fgdshdfgsLooking: 3j #123 || Substring1: Looking: 3j #123
String2: Looking: avb456j #13fgfddg || Substring2: Looking: avb456j #13

应该可以,而且我已经通过使用 ? 来匹配尽可能少的次数,并根据需要进行扩展,从而避免将所有内容都匹配到第二个 #,以防在字符串中的某个地方有第二个 # 后跟几位数字。

Live Demo

试试这个:

re.search("[A-Z]\w+:\s?\w+\s#\d+",string1)