如何用re.sub仅修改无前置日期的时间格式,保留带日期的时间
解决方案
要实现仅修改无前置日期结构的时间格式,我们可以通过负向回顾断言排除那些带有指定日期前缀的时间匹配项。
修改后的完整代码
import re # 示例文本 input_text = 'Alrededor de las 00:16 am o las 23:30 pm , quizas cerca del 2022_-_02_-_18 llega el avion, pero no a las (2022_-_02_-_18 00:16 am), de esos hay dos (22)' # 调整后的正则:通过负向回顾断言排除前置日期的情况 identify_time_regex = r"(?<!\(\d*_-_\d{2}_-_\d{2} )(?P<hh>\d{2}):(?P<mm>\d{2})[\s]*(?P<am_or_pm>(?:am|pm))" restructuring_structure_00 = r"\g<hh>----\g<mm>----\g<am_or_pm>" # 执行替换 input_text = re.sub(identify_time_regex, restructuring_structure_00, input_text) print(repr(input_text))
关键改动说明
- 新增
(?<!\(\d*_-_\d{2}_-_\d{2} )负向回顾断言:检查当前匹配的时间前面没有(\d*_-_\d{2}_-_\d{2} )格式的日期前缀,以此跳过带日期的时间项。 - 把原正则中的
[\s|]*改为[\s]*:避免错误匹配字面量竖线,只保留空格匹配逻辑。 - 移除替换模板中的多余括号:防止输出额外的无关括号。
运行代码后,输出结果符合要求:
'Alrededor de las 00----16----am o las 23----30----pm , quizas cerca del 2022_-_02_-_18 llega el avion, pero no a las (2022_-_02_-_18 00:16 am), de esos hay dos (22)'
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

