我有一个非常长的正则表达式。
vpa_pattern = '(VAP) ([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}): (.*)'
我的代码匹配组如下:
class ReExpr:
def __init__(self):
self.string=None
def search(self,regexp,string):
self.string=string
self.rematch = re.search(regexp, self.string)
return bool(self.rematch)
def group(self,i):
return self.rematch.group(i)
m = ReExpr()
if m.search(vpa_pattern,line):
print m.group(1)
print m.group(2)
print m.group(3)
我试图通过以下方式将正则表达式模式设置为多行,
vpa_pattern = '(VAP) \
([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}):\
(.*)'
或者甚至我试过:
vpa_pattern = re.compile(('(VAP) \
([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}):\
(.*)'))
但上述方法无效。对于每个组,我在打开和关闭括号后有一个空格()。我想当我分成多行时,它不会捡起来。
答案 0 :(得分:4)
看看re.X flag。它允许注释并忽略正则表达式中的空格。
a = re.compile(r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""", re.X)
答案 1 :(得分:3)
Python允许在括号中包含部分文本字符串:
>>> text = ("alfa" "beta"
... "gama")
...
>>> text
'alfabetagama'
或在您的代码中:
text = ("alfa" "beta"
"gama" "delta"
"omega")
print text
将打印
"alfabetagamadeltaomega"
答案 2 :(得分:1)
其实非常简单。您已使用{}
表示法。再次使用它。所以而不是:
'([0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}):'
这只是[0-9A-Fa-f]{2}:
重复6次,你可以使用:
'([0-9A-Fa-f]{2}:){6}'
我们甚至可以使用\d
来表示数字来进一步简化:
'([\dA-Fa-f]{2}:){6}'
注意:取决于您使用的
re
功能,you can pass in re.IGNORE_CASE并将该块简化为[\da-f]{2}:
所以你最后的正则表达式是:
'(VAP) ([\dA-Fa-f]{2}:){6} (.*)'