regex.sub意外地用某种编码修改替换字符串?

时间:2018-02-12 01:22:51

标签: python regex python-3.x

我有一个路径字符串“... \\ JustStuff \\ 2017GrainHarvest_GQimagesTestStand \\ ...”,我将其插入现有的文本文件而不是另一个字符串。我编译一个正则表达式模式并找到绑定文本以获取要插入的位置,然后使用regex.sub替换它。我正在做这样的事......

with open(imextXML, 'r') as file:
    filedata = file.read()
redirpath = re.compile("(?<=<directoryPath>).*(?=</directoryPath>)", re.ASCII)
filedatatemp = redirpath.sub(newdir,filedata)

插入的文本虽然搞砸了,“\\ 20”替换为“\ x8”,“\\”替换为“\”(单斜杠)

即。 “...... \\ JustStuff \\ 2017GrainHarvest_GQimagesTestStand \\ ...”成为 “...... \\ JustStuff \ x817GrainHarvest_GQimagesTestStand \ ...”

我在这里找不到什么简单的东西来解决它?

更新

进一步打破这一点,复制并粘贴以重现问题......

t2 = r'\JustStuff\2017GrainHarvest_GQimagesTestStand\te'
redirpath = re.compile("(?<=<directoryPath>).*(?=</directoryPath>)", re.ASCII)
temp = r"<directoryPath>aasdfgsdagewweags</directoryPath>"
redirpath.sub(t2,temp)

...产生

>>'<directoryPath>\\JustStuff\x817GrainHarvest_GQimagesTestStand\te</directoryPath>'

1 个答案:

答案 0 :(得分:2)

当您定义要插入的字符串时,请在其前面加上r,以表明它是raw string literal

>>> rex = re.compile('a')
>>> s = 'path\\with\\2017'
>>> sr = r'path\\with\\2017'
>>> rex.sub(s, 'ab')
'path\\with\x817b'
>>> rex.sub(sr, 'ab')
'path\\with\\2017b'