我有以下几点:
<text top="52" left="20" width="383" height="15" font="0"><b>test</b></text>
我有以下几点:
fileText = re.sub("<b>(.*?)</b>", "\1", fileText, flags=re.DOTALL)
其中 fileText 是我在上面发布的字符串。当我在运行正则表达式替换后打印出 fileText
时,我回来了
<text top="52" left="20" width="383" height="15" font="0"></text>
而不是预期的
<text top="52" left="20" width="383" height="15" font="0">test</text>
现在我对正则表达式相当精通,我知道它应该可以工作,事实上我知道它匹配正确,因为当我进行搜索并打印出groups
但我是 python 新手,我很困惑为什么它不能正确使用反向引用
最佳答案
您需要使用 raw-string此处是为了不将反斜杠作为转义字符处理:
>>> import re
>>> fileText = '<text top="52" left="20" width="383" height="15" font="0"><b>test</b></text>'
>>> fileText = re.sub("<b>(.*?)</b>", r"\1", fileText, flags=re.DOTALL)
>>> fileText
'<text top="52" left="20" width="383" height="15" font="0">test</text>'
>>>
注意 "\1"
如何更改为 r"\1"
。虽然这是一个很小的变化(一个字符),但它有很大的影响。见下文:
>>> "\1"
'\x01'
>>> r"\1"
'\\1'
>>>
关于Python re.sub 反向引用而不是反向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765265/