使用字符串作为re.compile的输入

0 投票
2 回答
1618 浏览
提问于 2025-04-15 20:41

我想在正则表达式中使用一个变量,像这样:

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

这样你就能看到区别了。

撰写回答