使用python正则表达式替换字符串的一部分
我有以下几行(很多):使用python正则表达式替换字符串的一部分,python,regex,replace,Python,Regex,Replace,我有以下几行(很多): … gfnfgnfgnf:5656756734 arvervfdsa:1343453563 详情:4685685685 ERVEVERSD:34545 verveversf:7896789567 我想做的是找到“special”行(无论“:”后面是什么数字) 并将此号码替换为“111222333”。如何使用python正则表达式实现这一点 for line in input: key, val = line.split(':') if key == 'p
…
gfnfgnfgnf:5656756734
arvervfdsa:1343453563
详情:4685685685
ERVEVERSD:34545
verveversf:7896789567
我想做的是找到“special”行(无论“:”后面是什么数字) 并将此号码替换为“111222333”。如何使用python正则表达式实现这一点
for line in input:
key, val = line.split(':')
if key == 'particular':
val = '111222333'
我不确定正则表达式在这种特殊情况下是否有任何价值。我猜他们会慢一点。也就是说,这是可以做到的。这里有一个方法:
for line in input:
re.sub('^particular : .*', 'particular : 111222333')
这其中涉及到一些微妙之处,而这几乎肯定不是您在生产代码中想要的。您需要检查所有的re模块常量,以确保正则表达式按照您期望的方式运行,等等。如果您尝试不使用re(当然,这并不是说re没有用处),您可能会惊讶于在Python中处理此类问题时所发现的灵活性;-) 确定需要正则表达式吗
other_number = '111222333'
some_text, some_number = line.split(': ')
new_line = ': '.join(some_text, other_number)
或使用sed:
sed -e 's/^particular: [0-9].*$/particular: 111222333/g' file
这里重要的一点是,如果您有很多行,您需要逐个处理它们。也就是说,你应该一次读一行,一次写一行,而不是在替换它们时读所有的行,然后再把它们写出来。(如果您实际上一次从磁盘读取一行,这将是低效的;但是,Python的IO是有能力的,它将为您缓冲文件。)
这将提高速度和内存效率。您的sed示例迫使我说整洁
python -c "import re, sys; print ''.join(re.sub(r'^(particular:) \d+', r'\1 111222333', l) for l in open(sys.argv[1]))" file
sed -e 's/^particular: [0-9].*$/particular: 111222333/g' file
with open(...) as infile, open(...) as outfile:
for line in infile:
if line.startswith("particular"):
outfile.write("particular: 111222333")
else:
outfile.write(line)
python -c "import re, sys; print ''.join(re.sub(r'^(particular:) \d+', r'\1 111222333', l) for l in open(sys.argv[1]))" file