在变量中使用OR运算符(|)作为python中的正则表达式

时间:2017-01-12 20:38:42

标签: python regex

我需要匹配字符串值列表。我正在使用'|'。join()构建一个传递给re.match的sting:

import re
line='GigabitEthernet0/1 is up, line protocol is up'
interfacenames=[
                'Loopback',
                'GigabitEthernet'
                ]
rex="r'" + '|'.join(interfacenames) + "'"
print rex
interface=re.match(rex,line)
print interface

代码结果是:

r'Loopback|GigabitEthernet'
None

但是,如果我将字符串直接复制到匹配中:

interface=re.match(r'Loopback|GigabitEthernet',line)

有效:

r'Loopback|GigabitEthernet'
<_sre.SRE_Match object at 0x7fcdaf2f4718>

我确实尝试用rex中的实际“Loopback | GigabitEthernet”替换.join,但它也没有用。从字符串传递时,管道符号看起来不会被视为运算符。 有任何想法如何解决它?

2 个答案:

答案 0 :(得分:2)

您使用r'前缀作为字符串文字的一部分。这是如何使用的:

rex=r'|'.join(interfacenames)

请参阅Python demo

如果 interfacenames 可能包含特殊的正则表达式元字符,请转义以下值:

rex=r'|'.join([re.escape(x) for x in interfacenames])

此外,如果您计划不仅在字符串的开头匹配字符串,请使用re.search而不是re.match。见What is the difference between Python's re.search and re.match?

答案 1 :(得分:1)

您不需要将"r'"放在开头"'"。这是文字原始字符串语法的一部分,它不是字符串本身的一部分。

rex = '|'.join(interfacenames)