Python 字符串替换未知数量

0 投票
3 回答
1788 浏览
提问于 2025-04-17 03:47

我刚开始学习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

撰写回答