在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)
答案 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'
>>>