使用正则表达式在文件中匹配多行(Python)
我有很多文件,每个文件里都有一组按照特定格式排列的行。我想一次性找到这些多行,并对它们进行一些操作,比如删除、移动到另一个文件等等。
文件中的多行内容如下所示。
self.unsupported_cmds = [r'\s*clns\s+routing',
r'\s*bfd\s+graceful-restart',
r'\s*ip\s+default-network',
r'\s*ip\s+default-gateway',
r'\s*ip\s+subnet-zero',
r'\s*ip\s+cef\s*$' ]
方括号里的内容可能会有所不同。
请帮我一下,怎么才能做到这一点。
1 个回答
1
根据Python的re
模块的文档,你可以在re.compile
方法中添加
import re
regex = re.match(r'''(
^\s*clns\s+routing$ |
^\s*bfd\s+graceful-restart$ |
^\s*ip\s+default-network$ |
^\s*ip\s+default-gateway$ |
^\s*ip\s+subnet-zero$ |
^\s*ip\s+cef\s*$
)+''', re.MULTILINE | re.VERBOSE)
注意,我添加了VERBOSE
标志,这样可以让正则表达式的书写更整洁、更易读。此外,你会看到有几个^
和$
符号。这就是多行正则表达式的工作原理,它允许你在一个文件中跨多行进行匹配。
另外,我必须提醒你,这个正则表达式只是用来检查文件是否格式正确。如果你想从这个文件中提取数据,你需要稍微修改一下这个正则表达式,以满足你的需求。
第二种代码变体
import re
regex = re.match(r'''(^
\s*
(clns|bfd|ip)
\s+
(routing|graceful-restart|default-network|default-gateway|subnet-zero|cef)
$)+''', re.MULTILINE | re.VERBOSE)