Python 常规表达式列表

Python 常规表达式列表,python,python-3.x,Python,Python 3.x,我正试图创建一个正则表达式列表,但自动添加了一个新的“\” a = ['\s+ interface *', '\s+ address', '\s+ priority \d'] >>> a[2] '\\s+ priority \\d' 我试着做这样的事情 with open('conf.txt') as f: lines = f.readlines() for i in lines: for s in a: if bool(re.match(s

我正试图创建一个正则表达式列表,但自动添加了一个新的“\”

a = ['\s+ interface *', '\s+ address', '\s+ priority \d']

>>> a[2]
'\\s+ priority \\d'
我试着做这样的事情

with open('conf.txt') as f:
   lines = f.readlines()

for i in lines:
    for s in a:
        if bool(re.match(s, i)):
            print('i')
所以基本上我有一个配置文件,我想找到一些特定的命令(列表a)。该命令有一个格式,因此我需要一个正则表达式

我想做类似的事情:

for i in lines:
    if bool(re.match('\s+ interface *', a)):
        print('i')
    elif bool(re.match( '\s+ address', a)):
        print('i')
    elif bool(re.match( '\s+ priority \d', a)):
        print('i')

您的列表确实包含单斜杠。如果要打印字符串,请尝试如下操作:

a = ['\s+ interface *', '\s+ address', '\s+ priority \d']

print( '%s'%a[0] )
输出将是,

\s+ interface *

请注意,它只有一个斜杠。

该想法按预期工作。我的问题是正则表达式本身。

for循环的输出是什么?它是否按您的要求打印“ok”字符?请尝试将其设置为原始字符串
r“regex”
注意“\\”表示单个反斜杠字符。这是预期的行为,也正是您想要的。我建议你学习一下这样缩放的“转义字符”和“转义序列”。@PixelEinstein:虽然肯定应该添加开头的
r
,但它不会改变这里发生的事情。问题在于理解反斜杠的作用;添加
r
不会删除任何反斜杠。最简单的方法可能是将列表创建为正则表达式列表,而不是创建字符串列表。根据python文档,您可以使用
re.compile()
执行此操作: