Python re.sub不替换字符串

Python re.sub不替换字符串,python,regex,string,Python,Regex,String,下面的代码有错误吗 import re text = 'AFL_v_CalcOneIntAreas (%as_Points[0].ub_X%);\n' print(re.sub('as_Points[0].ub_X', '0x00', text)) 预期产量为 AFL_v_CalcOneIntAreas (%0x00%); 但是实际输出与输入字符串相同,请让我知道它为什么会这样?您应该转义[,]和: >>> re.sub('as_Points\[0\]\.ub_X', '

下面的代码有错误吗

import re
text = 'AFL_v_CalcOneIntAreas (%as_Points[0].ub_X%);\n'

print(re.sub('as_Points[0].ub_X', '0x00', text))
预期产量为

AFL_v_CalcOneIntAreas (%0x00%);

但是实际输出与输入字符串相同,请让我知道它为什么会这样?

您应该转义
[
]

>>> re.sub('as_Points\[0\]\.ub_X', '0x00', text)
print(re.sub('as_Points\[0\]\.ub_X', '0x00', text))
# prints: AFL_v_CalcOneIntAreas (%0x00%);
表示“任何字符”,
[0]
只匹配“0”

您也可以这样做:

esc = re.escape('as_Points[0].ub_X')  # now '[0]' is treated like the string
                                      # literal '[0]' and not the regex '[0]'
re.sub(esc, '0x00', text)

有关更有用的功能,请访问。

您需要转义
[
]
和点

>>> re.sub('as_Points\[0\]\.ub_X', '0x00', text)
print(re.sub('as_Points\[0\]\.ub_X', '0x00', text))
# prints: AFL_v_CalcOneIntAreas (%0x00%);

在正则表达式中搜索特殊字符。你必须逃离他们

text = 'AFL_v_CalcOneIntAreas (%as_Points[0].ub_X%);\n'
print(re.sub('as_Points\[0\]\.ub_X', '0x00', text))

符号
[
]
在正则表达式中表示某种含义,您必须对其进行转义:

>>> re.sub('as_Points\[0\]\.ub_X', '0x00', text)
'AFL_v_CalcOneIntAreas (%0x00%);\n'
[a-z]
表示所有较低的字母<代码>[…]用于表示“其中的任何内容”,因此
[01]
表示0或1。
在您的例子中,
'as_Points[0].ub_X'
实际上是
'as_Points0.ub_X'

请注意,
也有特殊含义。意思是一个字符。你也应该逃避它


如果不知道表达式是否包含应转义的字符,可以使用:

但是,如果不需要正则表达式功能,字符串可以使用replace方法:

text.replace('as_Points[0].ub_X','0x00')

如果使用正则表达式,则需要使用反斜杠转义像
[]
这样的字符,因为它们具有特殊含义

但是您不需要使用正则表达式来替换文本字符串。只需使用:


你忘了逃走。too@Dotcomsuperstar在这个例子中,这不重要,但好的捕获。thx。@Marcin为什么是\。在这种情况下不重要?甚至都不是。re中的spl字符?它是特殊的。但在这种情况下。将匹配任何字符,而不仅仅是点。这不会改变这个特殊的例子。但是,一般来说,最好是将其越轨。假设搜索字符串存储在一个变量中,而我不知道变量中“[”或“]”的位置,是否有其他原始字符串机制可以实现同样的功能?@Bharadwaj我已经更新了我的答案。您可以使用
re.escape
函数。假设搜索字符串存储在变量中,而我不知道变量中“[”或“]”的位置,是否有其他原始字符串机制可以实现同样的功能?