匹配字符串开头的简单正则表达式函数" Bananas:"并返回第二部分。我没有正则表达式,但这不是我预期的方式:
import re
def return_name(s):
m = re.match(r"^Bananas:\s?(.*)", s)
if m:
# print m.group(0)
# print m.group(1)
return m.group(1)
somestring = "Bananas: Gwen Stefani" # Bananas: + name
print return_name(somestring) # Gwen Stefani - correct!
但是,我确信您没有使用(.*)
识别该群组以获得相同的结果。即匹配字符串的第一部分 - 返回剩余部分。但我不知道该怎么做。
另外,我在某个地方读到你应该在正则表达式中使用.*
时要谨慎。
答案 0 :(得分:3)
您可以使用lookbehind((?<=)
):
(?<=^Bananas:\s).*
请记住使用re.search
代替re.match
,因为后者会尝试在字符串的开头匹配(也就是隐式^
)。
至于.*
关注点 - 如果您对正则表达式的工作方式没有清楚的了解,可能会导致大量的回溯,但在这种情况下,它可以保证是线性搜索。
答案 1 :(得分:1)
使用备用正则表达式模块&#34; regex&#34;你可以使用perl的\K
元字符,这样就可以丢弃以前匹配的内容,只有 K 才会出现以下情况。
我并不是真的推荐这个,我认为你的解决方案已经足够好了,而且后面的答案也可能比仅使用另一个模块更好。