使用字符串作为re.compile的输入
我想在正则表达式中使用一个变量,像这样:
variables = ['variableA','variableB']
for i in range(len(variables)):
regex = r"'('+variables[i]+')[:|=|\(](-?\d+(?:\.\d+)?)(?:\))?'"
pattern_variable = re.compile(regex)
match = re.search(pattern_variable, line)
问题是,在我的正则表达式字符串中(使用ipython时),每当我输入一个反斜杠,python就会多加一个反斜杠,这样就导致我的正则表达式变得无效:
In [76]: regex
Out[76]: "'('+variables[i]+')[:|=|\\(](-?\\d+(?:\\.\\d+)?)(?:\\))?'"
有没有什么建议可以避免这个问题呢?
2 个回答
1
这里没有问题。你看到的其实是字符串的 repr()
输出。这个输出的目的是为了能大致上还原成原来的对象,所以它会把所有的反斜杠都加倍,同时也会对字符串两端使用的引号进行转义。
2
不,这只是为了显示多余的反斜杠,以便字符串可以再次读取,并且反斜杠的数量是正确的。你可以试试
print regex
这样你就能看到区别了。