以下代码运行良好
#!/usr/bin/python3
import re
preflist = 'ip prefix-list PL_FROM_7600 seq 255 permit 192.168.0.0/15 ge 20 le 25'
mymatch = re.search(r'(ip prefix-list) (?P<prefname>\w+) (?P<prefseq>seq \d+) (permit|deny)', preflist)
print(mymatch)
if mymatch is not None:
print(mymatch.group('prefname'))
print(mymatch.group('prefseq'))
并打印出以下内容,证明我的正则表达式正常工作:
[user@serv:14:14:58~/scripts]$ ./retest.py
<_sre.SRE_Match object; span=(0, 42), match='ip prefix-list PL_FROM_7600 seq 255 permit'>
PL_FROM_7600
seq 255
现在我正在尝试使用re.VERBOSE
将其拆分成多行(符合PEP8的每行最多72个字符的规定),但一直收到错误。我已经尝试了几乎所有的组合,包括re.compile
和使用原始格式或非原始格式。
这是一个我直接从Python控制台尝试的例子:
>>> preflist = 'ip prefix-list PL_FROM_7600 seq 255 permit 192.168.0.0/15 ge 20 le 25'
>>> myregex = re.compile(r'''
... (ip prefix-list)
... (?P<prefname>\w+)
... (?P<prefseq>seq \d+)
... (permit|deny)
... ''', re.VERBOSE)
>>> myregex
re.compile('\n(ip prefix-list)\n(?P<prefname>\\w+)\n(?P<prefseq>seq \\d+)\n(permit|deny)\n', re.VERBOSE)
>>> x = myregex.search(preflist)
>>> x
>>> print(x)
None
我尝试过的另一个例子...
>>> mypattern ='''
... (ip prefix-list)
... (\s?P<prefname>\w+)
... (\s?P<prefseq>seq \d+)
... (\spermit|deny)
... '''
>>> mypattern
'\n(ip prefix-list)\n(\\s?P<prefname>\\w+)\n(\\s?P<prefseq>seq \\d+)\n(\\spermit|deny)\n'
>>> preflist = 'ip prefix-list PL_FROM_7600 seq 255 permit 192.168.0.0/15 ge 20 le 25'
>>> preflist
'ip prefix-list PL_FROM_7600 seq 255 permit 192.168.0.0/15 ge 20 le 25'
>>> mymatch = re.search(mypattern, preflist,re.VERBOSE)
>>> mymatch
>>> print(mymatch)
None
>>>
\s
或\s+
替换它们(参见seq \d+
)。 - Wiktor Stribiżew