如何在python正则表达式中重复一个模式?

2024-10-01 09:42:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个python正则表达式,有一个工作表达式:

\n(?P<curve>\w+)(?:.+)(?P<unit>\.\S*)(?:\s+.\s+)(?P<desc>:.+)|\n(?P<curve2>\w+)(?:.+)(?P<unit2>\.\S*)|\n(?P<curve3>\w+)

我想知道我可以重复从第一个模式如果,原因是我不想在许多“曲线”或“单位”为每一个情况。在

我的测试数据如下:

^{pr2}$

这个想法是让MD和RHO也在“曲线”组中。在


Tags: 表达式模式情况unit单位原因md曲线
3条回答

假设你的正则表达式是正确的。为此,请使用finditer()方法迭代所有匹配项。在

示例:

for m in re.finditer(r'REGEX_GOES_HERE', text):
    print m.group('curve')
    print m.group("unit")

通过这种方式,您选择了所有匹配项,以及它们的named groups都是完整的,如您所愿!在

我不太清楚你的意思,但以下几点可能会有所帮助:

如果要找到模式的所有匹配项,可以使用re.findall(pattern, string)

它返回匹配项的list。。在

re module docs

在正则表达式中没有特殊的语法来避免这种重复,因此在一般情况下,您无法避免一定数量的重复。但是,在您的特定情况下,您应该能够使用可选组来解决您的问题:

\n(?P<curve>\w+)((?:.+)(?P<unit>\.\S*)((?:\s+.\s+)(?P<desc>:.+))?)?

在详细模式下最好写为:

^{pr2}$

使组嵌套更易于阅读。我还删除了?:组,因为在本例中它们是无用的。在

相关问题 更多 >