Python在含有特殊字符的字符串中使用re.sub
我正在尝试用以下代码在字符串中替换一个完全匹配的值,但结果并不是我预期的那样。
import re
expression = "IO_NIP_PORT_ID_TABLE2[1] + IO_NIP_PORT_ID_TABLE2[1][2]"
token = "IO_NIP_PORT_ID_TABLE2[1]"
token_value = "0"
expression = re.sub(r'\b%s(?=\W)' % re.escape(token), token_value, expression)
print(expression)
它给我的结果是 0 + 0[2]
,但我希望得到的是 0 + IO_NIP_PORT_ID_TABLE2[1][2]
。
我只想替换完全匹配的部分,比如 IO_NIP_PORT_ID_TABLE2[1]
,而不是 IO_NIP_PORT_ID_TABLE2[1][2]
。
1 个回答
0
一个更简单的解决办法是使用负向前瞻来匹配所有不是空格的字符。简单来说,这个模式变成了'%s(?!\S)'
,意思是这个表达式后面不能跟任何东西,除了空格、制表符或换行符。
整体来看,它会像这样:
expression = "IO_NIP_PORT_ID_TABLE2[1] + IO_NIP_PORT_ID_TABLE2[1][2]"
token = "IO_NIP_PORT_ID_TABLE2[1]"
token_value = "0"
expression = re.sub(r'%s(?!\S)' % re.escape(token), token_value, expression)
print(expression)