【发布时间】:2014-08-06 21:15:55
【问题描述】:
我正在尝试使用 python 的 re 模块匹配一个字符串,其中一个模式可能重复或不重复。该字符串以由: 分隔的三个字母部分开头,然后是=,后面是另一个字母部分。字符串可以在这里结束或继续重复alphabetical_part=alphabetical_part 的模式,用逗号分隔。两个样本如下:
Finishes with just one repeat ==> aa:bb:cc=dd
Finishes with more than one repeat ==> aa:bb:cc=dd,ee=ff,gg=hh
如您所见,字符串末尾不能有逗号。我写了一个匹配这个的模式:
>>> pt = re.compile(r'\S+:\S+:[\S+=\S+$|,]+')
re.match 为此返回一个匹配对象,但是当我对重复模式进行分组时,我得到了一些奇怪的东西,请参阅:
>>> st = 'xx:zz:rr=uu,ii=oo,ff=ee'
>>> pt = re.compile(r'\S+:\S+:([\S+=\S+$|,]+)')
>>> pt.findall(st)
['e']
我不确定我写的模式是否正确;我怎样才能检查它?如果错了,那么正确的答案是什么?
【问题讨论】:
-
“我如何检查它?”:如果你想检查你的正则表达式是否在运行,你可以查看debuggex.com 或regex101.com。 Here's what your regex is currently doing。在我看来,
ee:ff不适合。 “字符串可以在这里结束或继续重复字母部分=字母部分的模式,用逗号分隔”。ee:ff用冒号而不是等号分隔。 -
另外,您期望输出什么?你想要
['rr=uu,ii=oo,ff==ee']还是['rr=uu','ii=oo','ff=ee']? -
@skamazin 我更正了
ee:ff部分。另外,实际上我什么都不想要,我只想检查字符串是否与模式匹配。 -
如果要检查是否匹配,只需查看它是否在
re.findall(...)的返回数组中