构建正则模式精准替换时间语境中的'a m'为'am'以规避误替换
西班牙语时间表述中"a m"的精准替换问题
输入字符串示例
#example 1.1 colloquial_hour = "Hola nos vemos a las diez y veinte a m, ten en cuenta que al amanecer tendremos que estar despiertos, porque debemos estar alli a eso de nueve a m o las diez y cuarto a m" #example 1.2 colloquial_hour = "A mi me parece entre las 10 15 am y las 11 a m, o a las 15 a m aunque quizas a medianoche este bien a eso de las 00:00 a m" #example 1.3 colloquial_hour = "Puede que a las 10 am. Hay 10 a medias, a m mmm... creo que en 10 estarian para terminar a las 11:00 hs a m 11:59 a m" #example 1.4 colloquial_hour = "Amediados a mediados del 30 antes de y dia; me parace que hay que estar en casa. Medianamente a, mediados de las 05 a m o cerca de 6 a m."
初步尝试的方法
曾使用简单字符串替换,但会出现误替换:
colloquial_hour = colloquial_hour.replace('a m', 'am ')
期望的正确输出
#example 1.1 colloquial_hour = "Hola nos vemos a las diez y veinte am, ten en cuenta que al amanecer tendremos que estar despiertos, porque debemos estar alli a eso de nueve am o las diez y cuarto am" #example 1.2 colloquial_hour = "A mi me parece entre las 10 15 am y las 11 am, o a las 15 am aunque quizas a medianoche este bien a eso de las 00:00 am" #example 1.3 colloquial_hour = "Puede que a las 10 am. Hay 10 a medias, a m mmm... creo que en 10 estarian para terminar a las 11:00 hs am 11:59 am" #example 1.4 colloquial_hour = "Amediados a mediados del 30 antes de y dia; me parace que hay que estar en casa. Medianamente a, mediados de las 05 am o cerca de 6 am."
精准匹配规则
- 仅替换数字或时间相关表述后的"a m"为"am"
- "a m"之后允许的字符:一个或多个空格、句号、逗号,或是字符串结尾
- 需兼容"am"前的特殊时间后缀,包括:
:,:,:,hs,hs,hs,h.s.,h.s.,h.s.,h.s,h.s,h.s等
特殊场景示例
以下是需兼容的边缘输入与对应输出:
input_t = "a las 12: a m" output = "a las 12: am" input_t = "a las 12 : a m" output = "a las 12 : am" input_t = "a las 12 hs a m" output = "a las 12 hs am" input_t = "a las 12:hs a m" output = "a las 12:hs am" input_t = "a las 12: hs a m" output = "a las 12: hs am" input_t = "a las 12hsa m" output = "a las 12hs am" input_t = "a las 12h.sa m" output = "a las 12h.s am" input_t = "a las 12 h.sa m" output = "a las 12 h.s am" input_t = "a las 12 h.s.a m" output = "a las 12 h.s. am"
正则替换解决方案
使用Python的re.sub实现精准匹配替换,正则模式会优先匹配时间相关内容后的"a m",避免误替换无关场景:
import re # 定义正则模式 pattern = r'(\b(?:diez|nueve|once|[\d:]+(?:\s?hs|\s?h\.s\.?)?)\s*)a m(?=\s*[.,]?\s*$|\s*[.,])' # 替换匹配到的内容 colloquial_hour = re.sub(pattern, r'\1am', colloquial_hour)
模式说明
\b(?:diez|nueve|once|[\d:]+(?:\s?hs|\s?h\.s\.?)?):匹配时间相关词汇(西班牙语数字如diez/nueve,或数字+冒号,附带hs/h.s.等后缀)\s*:匹配时间内容与"a m"之间的任意空格a m:目标替换字符串(?=\s*[.,]?\s*$|\s*[.,]):正向预查,确保"a m"后是空格、标点或字符串结尾
内容的提问来源于stack exchange,提问作者Matt095
相关产品推荐
相关产品推荐

