Python在含有特殊字符的字符串中使用re.sub

0 投票
1 回答
62 浏览
提问于 2025-04-14 18:22

我正在尝试用以下代码在字符串中替换一个完全匹配的值,但结果并不是我预期的那样。

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)

撰写回答