使用正则表达式替换文件中的字符串

27

如何使用Python中的正则表达式替换文件中的字符串?

我想打开一个文件,将其中的某些字符串替换为其他字符串,并且我们需要使用正则表达式进行搜索和替换。有什么打开文件并使用搜索和替换方法的示例可以参考吗?


2
re.sub 是你想要的函数。 - ᴀʀᴍᴀɴ
1
@Arman 我想你是指 re.sub - L3viathan
2个回答

45
# The following code will search 'MM/DD/YYYY' (e.g. 11/30/2016 or NOV/30/2016, etc ),
# and replace with 'MM-DD-YYYY' in multi-line mode.
import re
with open ('input.txt', 'r' ) as f:
    content = f.read()
    content_new = re.sub('(\d{2}|[a-yA-Y]{3})\/(\d{2})\/(\d{4})', r'\1-\2-\3', content, flags = re.M)

2
你所说的'mm'是指11,而不是NOV(有3个字符),对吗?但是,您正在使用\w将其匹配为字符单词,而不是像其他数字一样的\d数字,因此'mm'也需要被匹配为\d。 - R. Navega
1
@lucidbrot:对于第一个问题,在这种特定情况下,使用或不使用r没有区别。有一个线程,你可以查看一下:https://dev59.com/LWsz5IYBdhLWcg3wBzfi - Quinn
1
@Timo:是的,当然可以。 - Quinn
1
这个能进行内联替换吗?难道你不需要在某个地方写下来吗? - john k
5
re.sub 不是用于直接替换原文本的方法,如果想将新内容保存到文件中,需要进行额外的步骤。 - Quinn
显示剩余4条评论

1

这是一个通用的格式。根据您的要求,您可以使用re.sub或re.match。以下是打开文件并执行操作的通用模式:

import re

input_file = open("input.h", "r")
output_file = open("output.h.h", "w")
br = 0
ot = 0

for line in input_file:
    match_br = re.match(r'\s*#define .*_BR (0x[a-zA-Z_0-9]{8})', line) # Should be your regular expression
    match_ot = re.match(r'\s*#define (.*)_OT (0x[a-zA-Z_0-9]+)', line) # Second regular expression

if match_br:
    br = match_br.group(1)
    # Do something

elif match_ot:
    ot = match_ot.group(2)
    # Do your replacement

else:
    output_file.write(line)

2
无法使用多行正则表达式。 - Alyssa Haroldsen
1
谢谢,我只是Python的初学者,我们的项目是在Python中创建脚本,其中包含字符串xkcd(http://norvig.com/ipython/xkcd1313.ipynb),将用字符串[gikuj]..n|a.[alt]|[pivo].l|i..o|[jocy]e|sh|di|oo替换bu.*ls,并且还将在包含字符= a [的行中将其替换为我们的名字...所以这就是我问这个问题的原因,因为我完全迷失了。 - Michal Vasko
1
我认为你应该清楚地阐述你的需求,并从这里开始尝试一些示例 https://pymotw.com/2/re/ - user2532296

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接