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()
执行此操作: