使用正则表达式python匹配文件中的多行

时间:2011-12-16 05:32:41

标签: python regex

我有一些文件,每个文件在给定的模式中都有一组行。我想一次匹配这些多行,并对它们进行一些操作,如删除,移动到另一个文件等。

文件中的多行如下所示。

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 个答案:

答案 0 :(得分:1)

正如python re模块documentation所说,您可以将MULTILINE标志添加到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)