Python正则表达式文本替换
工具
re模块中的sub(parm1, parm2)
函数
- 参数1(parm1): 匹配的模式
- 参数2(parm2): 替换的模式
示例
- 将日期格式从“11/28/2018”改为“2018-11-28
import re
text='今天是:11/28/2018'
print(re.sub(r'(\d+)/(\d+)/(\d+)',r'\3-\1-\2',text)) # \3表示第一个()中的文本
print(text)
# 如果打算用相同的模式执行重复替换,可以考虑先将 模式编译 以获得更好的性能。
import re
text='今天是:11/28/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)') # 模式编译
print(text)
print(datepat.sub(r'\3-\1-\2',text))
今天是:11/28/2018
今天是:2018-11-28
-
将日期格式从 “今天是:11/28/2018” 改为 “今天是:2018 Nov 28"
(对于更加复杂的情况,可以指定一个替换回调函数。)
import re
from calendar import month_abbr
text='今天是:11/28/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)')
# 替换回调函数。
def change_date(m):
mon_name=month_abbr[int(m.group(1))] # 将 11 转换为 Nov
return '{} {} {}'.format(m.group(3),mon_name,m.group(2)) # m.group(3) 匹配的第三个括号(\d+)
print(text)
print(datepat.sub(change_date,text))
今天是:11/28/2018
今天是:2018 Nov 28
-
将 python2 中的 print “XXX” 转换为 python3 中的 print(“XXX”)
import re filename = "PSOProblems.py" # 被替换的文件名 with open(filename, 'r') as fp: text = fp.read() cp = re.compile(r'print ([^a-zA-Z0-9].*)\n') # 模式编译 # 替换回调函数。 def change_date(m): return f'print({m.group(1)})\n' newText, n = cp.subn(change_date, text) with open(f"new_{filename}", 'w') as fp: fp.write(newText) print(f"完成{n}处替换!")
完成37处替换!
其他
获取一共完成了多少次替换,可以使用 re.subn()
代替 re.sub()
, 其 返回值 为 新文本 和 次数
以上式为例:
import re
text='今天是:11/28/2018,昨天是11/27/2018'
datepat=re.compile(r'(\d+)/(\d+)/(\d+)')
new_text,n=datepat.subn(r'\3-\1-\2',text)
print(text)
print(new_text)
print(n)
参考Reference
https://www.runoob.com/python/python-reg-expressions.html
https://www.jb51.net/article/168336.htm