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

3
在Python中,我们如何使用re从字符串中获取以下子字符串。
string1 = "fgdshdfgsLooking: 3j #123"
substring = "Looking: 3j #123"

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

尝试:

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

寻找这个词是否总是存在? - med benzekri
4个回答

2
你的正则表达式大部分是正确的,只需要移除行尾符(End of Line)$。例如在string2这种情况下,模式并不以行尾符结尾,并且在模式结束后还有一些额外的字符串。请注意保留HTML标签。
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

应该可以工作,同时我使用了?进行懒惰匹配,尽可能少地匹配,根据需要扩展,以避免匹配到第二个#之前的所有内容,以防在字符串中后面出现了带有几个数字的第二个#

演示链接


1
正是我所需要的。谢谢!这也解决了我的第三个情况。 - jdfhf
@jdfhf 很高兴能够帮到你。如果你觉得这个回答解决了你的问题,请务必将其标记为答案,这样其他人就知道问题已经被解决,并知道在哪里寻找解决方案。 - K450

2

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

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

如果您也希望re返回Looking,您需要将其括在圆括号中:

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

这个工作得很好!但我忘记在描述中添加另一个场景。在字符串String3 = "Looking: avb456j #13Looking:hgf55j #14"中,如何同时获取substring1 = "Looking: avb456j #13" 和 substring2 = "Looking:hgf55j #14"? - jdfhf

1

请尝试以下代码:

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

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

enter image description here


1

试试这个:

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

这个工作得很好!但是我忘记在描述中添加另一个场景了。 String3 = "Looking: avb456j #13Looking:hgf55j #14"在这种情况下,我该如何获取两个子字符串: substring1 = "Looking: avb456j #13" 和 substring2 = "Looking:hgf55j #14" - jdfhf
那么这个更新后的代码应该可以完成它。 - med benzekri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接