【问题标题】:Regular Expression: Include Text After (...) Group正则表达式:在 (...) 组之后包含文本
【发布时间】:2016-01-06 02:16:05
【问题描述】:

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

import re
s = "texttoignore_ABCABC12345_moretexttoignore"
re.findall("(ABC)+\d+", s)

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

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

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

谢谢!
约翰

【问题讨论】:

  • 你也可以使用re.search():re.search(r"(ABC)+\d+", s).group()

标签: python regex


【解决方案1】:

这里的“问题”是re.findall 的相当具体的行为

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

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

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

或使用re.finditer:

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

如果您只想找到一次模式,那么来自 cmets 的 @Jkdc 方法可以正常工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多