【发布时间】:2019-04-13 21:58:31
【问题描述】:
在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'
【问题讨论】:
-
我想我不清楚我在这种情况下使用的是 reg ex。想象一下这句话:“圆形剧场在上午 10 点至上午 11 点和下午 3 点至晚上 7 点开放”——我们要确保不要替换圆形剧场中的“上午”。
-
真正的问题是你真的想改变那个句子/例子吗?鉴于您设置的条件,您 可以 使用它,但它会很丑陋。
>>> re.sub(r'(?<=\d)([ap]m)', r' \1', 'the amphitheater opens at 10am-11am and 3pm-7pm')...#OUTPUT: 'the amphitheater opens at 10 am-11 am and 3 pm-7 pm' -
@FailSafe 得出了同样的结论。积极的后视工作,但句子看起来很难看。 OP是否想要
10 am - 11 am and 3 pm - 7 pm之类的东西?现在这完全是原始帖子中的另一个问题。 :) -
@FailSafe 这句话转换不适合人类消费,所以是的,我真的很想这样做。