繁体   English   中英

如何在python中拆分非常长的正则表达式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM