我正在尝试编写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内容。谁能告诉我原因?
答案 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。