[英]how to split very long regular expression in python
我有一个非常长的正则表达式。
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}):\
(.*)'))
但上述方法无效。 对于每个组,我在打开和关闭括号后有一个空格()。 当我分成多行时,我想它不会捡起来。
看看re.X标志 。 它允许注释并忽略正则表达式中的空格。
a = re.compile(r"""\d + # the integral part
\. # the decimal point
\d * # some fractional digits""", re.X)
如果括在括号中,Python允许在部分中编写文本字符串:
>>> text = ("alfa" "beta"
... "gama")
...
>>> text
'alfabetagama'
或者在你的代码中:
text = ("alfa" "beta"
"gama" "delta"
"omega")
print text
将打印
"alfabetagamadeltaomega"
它其实很简单。 您已使用{}
表示法。 再次使用它。 所以代替:
'([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}:
的重复[0-9A-Fa-f]{2}:
6次,你可以使用:
'([0-9A-Fa-f]{2}:){6}'
我们甚至可以通过使用\\d
来表示数字来进一步简化它:
'([\dA-Fa-f]{2}:){6}'
注:根据什么
re
使用的功能, 你可以在re.IGNORE_CASE传递和简化块下降到[\\da-f]{2}:
所以你的最终正则表达式是:
'(VAP) ([\dA-Fa-f]{2}:){6} (.*)'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.