首页 > 解决方案 > Python re.sub 将部分字符串更改为 ascii

问题描述

test1 = "<test>222</test>blah blah blah"
newVal = "222"
mstring = "(<test>).*(</test>)"
newString = re.sub(mstring,rf"\1{newVal}\2",test1)
print(newString)

我试图在我的字符串中找到一个特定的值,并使用 re.sub 函数替换为不同的字符串。似乎我找到了正确的匹配并且替换正在工作,但是 python 正在将部分字符串转换为其 ascii 等效值。你能帮我用上面的代码吗,以便我产生下面的输出

<test>222</test>blah blah blah

相反,我得到了低于结果

R2</test>blah blah blah

标签: pythonregex

解决方案


这是一个可能的解决方案:

test1 = "<test>222</test>blah blah blah"
newVal = "111"
mstring = "(<test>).*(</test>)"
newString = re.sub(mstring, f'\g<1>{newVal}\g<2>', test1)`
print(newString) # <test>111</test>blah blah blah

例如,您的方法适用newVal于一封信:

newVal = "a"
re.sub(mstring, f'\1{newVal}\2', test1) # <test>a</test>blah blah blah

这种奇怪的行为是由于\1{newVal}(with newVal=333) 将被解释为对组 1333 的引用。\g<1>语法等效于\1,但在替换中并不模棱两可。


推荐阅读