我正在做一个python正则表达式并且有一个工作表达式:
\n(?P<curve>\w+)(?:.+)(?P<unit>\.\S*)(?:\s+.\s+)(?P<desc>:.+)|\n(?P<curve2>\w+)(?:.+)(?P<unit2>\.\S*)|\n(?P<curve3>\w+)
我想知道我可以从第一个开始重复这个模式,原因是我不希望在很多情况下进行分组&#34;曲线&#34;或&#34;单位&#34;对于每个案例。
我的测试数据如下:
#-------------
MD
BMK_STA .Mpsi : Modulus
FANG . : Friction Angle
PR .unitless :
RHO .g/cm3
我们的想法是让MD和RHO也在&#34;曲线&#34;基。
答案 0 :(得分:0)
我不完全确定你的意思,但以下内容可能有所帮助:
如果您想查找某个模式的每个匹配项,可以使用re.findall(pattern, string)
它会返回list
个匹配项。
答案 1 :(得分:0)
没有特殊的语法可以避免在正则表达式中出现这种重复,因此在一般情况下,您无法避免一定程度的重复。但是,在您的特定情况下,您应该能够使用可选组来解决您的问题:
\n(?P<curve>\w+)((?:.+)(?P<unit>\.\S*)((?:\s+.\s+)(?P<desc>:.+))?)?
最好以详细模式编写:
\n(?P<curve>\w+)
(
.+
(?P<unit>\.\S*)
(
\s+.\s+
(?P<desc>:.+)
)?
)?
使组嵌套更容易阅读。我也删除了?:
组,因为在这种情况下它们是没用的。
答案 2 :(得分:0)
假设你的正则表达式是正确的。为此,请使用finditer()方法迭代所有匹配项。
示例:
for m in re.finditer(r'REGEX_GOES_HERE', text):
print m.group('curve')
print m.group("unit")
通过这种方式,您可以选择所有匹配项,并且named groups
完整无缺!