Python 字符串替换未知数量
我刚开始学习PYTHON,对正则表达式一窍不通,现在在文件中替换一个不知道的数字时遇到了困难。我查阅了很多关于Python的教程和re模块的例子,但还是不知道该怎么写这个表达式。
# myfile.txt
Some text
More text
Option "BlankTime" "15"
more text
我想把“15”替换成另一个数字,这一行在文件中只出现一次,但我不知道它在第几行,而且“15”的值也是未知的,可能是任何在引号里的数字。
最好的办法是用Python来做(re模块??),但如果不行的话,也许可以用sed??
3 个回答
-1
myfile = open('myfile.txt', 'r')
text = myfile.read()
myfile.close()
print re.sub(r'\d+', '42', text)
\d
是用来匹配数字的,+
则表示前面的模式至少要出现一次。
1
import re
with open("myfile.txt", "r") as myfile:
mytext = myfile.read()
pattern = re.compile(r'^(Option\s+"BlankTime"\s+")(\d+)"', re.MULTILINE)
mystr = pattern.sub(r'\1REPLACED"', mytext)
with open("myfile.txt", "w") as myfile:
myfile.write(mytext)
这段代码会一次性替换文件中所有出现的内容。我把数字放在了括号里,这样你可以在替换之前对它做点什么。
1
听起来你是在寻找一个特定的参数(BlankTime
)。你可以使用下面这个简单的命令来实现:
cat myfile.txt | sed 's/\("BlankTime"\s*"\)[^"]*/\1987/'
这个命令会查找 "BlankTime"
,并把它的值替换成 987
,其他的行都不会受到影响。
补充说明 如果你想要替换文件里的内容,可以按照以下两个步骤进行:
cat myfile.txt | sed 's/\("BlankTime"\s*"\)[^"]*/\1987/' > myfile.txt.tmp
mv myfile.txt.tmp myfile.txt