正则表达式匹配,返回剩余的字符串

时间:2016-05-02 15:46:06

标签: regex python-2.7

匹配字符串开头的简单正则表达式函数" 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!

但是,我确信您没有使用(.*)识别该群组以获得相同的结果。即匹配字符串的第一部分 - 返回剩余部分。但我不知道该怎么做。

另外,我在某个地方读到你应该在正则表达式中使用.*时要谨慎。

2 个答案:

答案 0 :(得分:3)

您可以使用lookbehind(?<=)):

(?<=^Bananas:\s).*

请记住使用re.search代替re.match,因为后者会尝试在字符串的开头匹配(也就是隐式^)。

至于.*关注点 - 如果您对正则表达式的工作方式没有清楚的了解,可能会导致大量的回溯,但在这种情况下,它可以保证是线性搜索。

答案 1 :(得分:1)

使用备用正则表达式模块&#34; regex&#34;你可以使用perl的\K元字符,这样就可以丢弃以前匹配的内容,只有 K 才会出现以下情况。

我并不是真的推荐这个,我认为你的解决方案已经足够好了,而且后面的答案也可能比仅使用另一个模块更好。