首页 > 解决方案 > Python 替换使用正则表达式找到的所有匹配项

问题描述

在 python 中,尝试替换使用正则表达式找到的所有出现的字符串,例如:

'10am 11pm 13am 14pm 4am'

变成

'10 am 11 pm 13 am 14 pm 4 am'

我试过了

re.sub('([0-9].*)am(.*)', r'\1 am \2', ddata) 

但这只会替换最后一次出现。

import re
regex = re.compile('([0-9].*)am+', re.S)
myfile =  '10am 11pm 13am 14pm 4am'
myfile2 = regex.sub(lambda m: m.group().replace(r'am',r" am ",1), myfile)
print(myfile2)

仅替换 'am' 的第一次出现

对我来说预期的结果'10 am 11pm 13 am 14pm 4 am'

标签: pythonregex

解决方案


对数字和“am”或“pm”字符串使用捕获组,然后用组之间的空格替换。

import re

s = '10am 11pm 13am 14pm 4am'

subbed = re.sub(r'(\d+)([ap]m)', r'\1 \2', s)
print(subbed)
# 10 am 11 pm 13 am 14 pm 4 am

推荐阅读