我执行文件时re.sub不会替换字符串

时间:2018-08-01 16:59:24

标签: python

我正在尝试编写python脚本来练习re.sub方法。但是当我使用python3运行脚本时,我发现文件中的字符串没有改变。 这是我的location.txt文件,

34.3416,108.9398

这是regex.py包含的内容,

import re
with open ('location.txt','r+') as second:
    content = second.read()
    content = re.sub('([-+]?\d{2}\.\d{4},[-+]?\d{2}\.\d{4})','44.9740,-93.2277',content)
    print (content)

我设置了一条打印语句来测试输出,它给了我

34.3416,108.9398

这不是我想要的。 然后,将“ r +”更改为“ w +”,它会完全删除location.txt内容。谁能告诉我原因?

2 个答案:

答案 0 :(得分:2)

您的正则表达式存在另一个答案中的问题,这是Andrej Kesely指出的。 \d{2}应该为\d{2,3}

content = re.sub(r'([-+]?\d{2,3}\.\d{4},[-+]?\d{2,3}\.\d{4})', ,'44.9740,-93.2277',content)

解决此问题后,您更改了字符串,但没有将其写回到文件中,只是在更改内存中的变量。

second.seek(0) # return to beginning of file
second.write(content) # write the data back to the file
second.truncate() # remove extraneous bytes (in case the content shrinked)

答案 1 :(得分:0)

您location.txt中的第二个数字是108.9398,该数字在点号之前有3位数字,并且与您的正则表达式不匹配。将您的正则表达式更改为:

([-+]?\d{2,3}\.\d{4},[-+]?\d{2,3}\.\d{4})

在线regexp here