Python替换使用正则表达式找到的所有匹配项

时间:2019-04-12 19:44:17

标签: python regex

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

python setup.py install --record installfiles.txt

成为

'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) 

仅替换首次出现的“ am”

给我的预期结果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)

4 个答案:

答案 0 :(得分:1)

将捕获组用于数字和“ 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

答案 1 :(得分:0)

如果您确实想要使用正则表达式而不是如上所述的纯字符串replace方法的解决方案,则可以使用以下代码段。

import re
myfile = '10am 11pm 13am 14pm 4am'
myfile2 = re.sub(r'(\d+)(am)', lambda m: '{} {}'.format(*m.groups()), myfile, 0)
print(myfile2)

答案 2 :(得分:0)

您可以在不使用re的情况下执行此操作:

'10am 11pm 13am 14pm 4am'.replace('a',' a').replace('p',' p')  

## Output: '10 am 11 pm 13 am 14 pm 4 am'

答案 3 :(得分:0)

这将完成工作:

import re
myfile =  '10am 11pm 13am 14pm 4am'
re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)

这是测试输出:

>>> import re
>>> myfile =  '10am 11pm 13am 14pm 4am'
>>> re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)
'10 am 11 pm 13 am 14 pm 4 am'
>>> 

编辑:这是处理您在注释中发布的字符串的相同解决方案的输出:

>>> import re
>>> myfile = 'The amphitheater opens at 10am-11am and 3pm-7pm'
>>> re.sub(r'(\d+)(am|pm)', r'\1 \2', myfile)
'The amphitheater opens at 10 am-11 am and 3 pm-7 pm'
>>>