正则表达式:包括(...)组后的文本

时间:2016-01-05 18:04:32

标签: python regex

我正在学习正则表达式。我需要匹配括号组中的内容,然后是我定义的一些模式。当我用正则表达式(在Python中)尝试这个时,它只返回它匹配的括号中的部分,而不是它后面的模式。一个例子应该澄清:

R

当我说到括号组时,在上面的例子中,这是“(ABC)+”部分。我打算在括号中查找一个或多个重复的模式(在本例中为“ABC”),然后是模式。

问题在于:它之后不会返回模式。 (在这个例子中,它将返回'ABC',但我想要'ABCABC12345'或'ABC12345'或更好'12345')

如何在返回值中包括括号后面的部分?这是关于正则表达式的东西还是特定于这个Python方法?

谢谢!
约翰

1 个答案:

答案 0 :(得分:4)

这里的“问题”是re.findall

的相当具体的行为
  

如果模式中存在一个或多个组,则返回a       小组名单;如果模式,这将是一个元组列表       有不止一个小组。

这里有几个选项。要么让你的小组不被捕获:

>>> re.findall("(?:ABC)+\d+", s)
['ABCABC12345']

或使用re.finditer

>>> [m.group(0) for m in re.finditer("(ABC)+\d+", s)]
['ABCABC12345']

如果你只想找到一次模式,那么@ Jkdc的评论方法就可以了。

>>> re.search("(ABC)+\d+", s).group()
'ABCABC12345'