You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Python正则表达式,实现指定规则下a m转am的替换?

修复Python正则替换代码,实现特定规则的"a m"替换

需求说明

需要修复现有正则表达式,实现:当字符串中的数字(标记为X)之后跟随符合规则的"a m"时,将"a m"替换为"am"。

具体匹配规则:

  • 需要替换的"a m"必须前置数字X
  • X与"a m"之间可包含以下内容的任意组合:
    • 任意数量的空格
    • 可选的冒号
    • 可选的hs、h.s或h.s.

现有代码

out = re.sub(r"(hs|h.s|h.s.)a m(\W|\b)", r"\1 am\2", out)
print(repr(out))

输入示例

# example 1.1
colloquial_hour = "Cerca de las 2: hs a m, hay que salir antes de esas hs a m"
# example 1.2
colloquial_hour = "A medida que avance cerca de la media noche 12: 04 hs a m. Deben ir a las 15 hs a m."
# example 1.3
colloquial_hour = "A mmm... cerca de las 12: h.s a m, hay que salir antes de esas h.s. a m"
# example 1.4
colloquial_hour = "A medida que avance cerca de las 12:04 hs. a m. Deben ir a las 15 h.s a m."

期望正确输出

# correct output for example 1.1
"Cerca de las 2: hs am, hay que salir antes de esas hs a m"
# correct output for example 1.2
"A medida que avance cerca de la media noche 12: 04 hs am. Deben ir a las 15 hs am."
# correct output for example 1.3
"A mmm... cerca de las 12: h.s am, hay que salir antes de esas h.s. a m"
# correct output for example 1.4
"A medida que avance cerca de las 12:04 hs. am. Deben ir a las 15 h.s am."

修复后的代码及解释

修复后的正则替换代码

import re

def fix_am_format(text):
    # 匹配数字后符合规则的"a m",替换为"am"
    return re.sub(r"(?<=\d)(?:\s*[:]?\s*(?:h\.?s\.?)?\s*)a m(?=\W|\b)", r"am", text)

正则规则拆解

  • (?<=\d):正向零宽断言,确保目标"a m"前面存在数字,这是触发替换的核心条件
  • (?:\s*[:]?\s*(?:h\.?s\.?)?\s*):匹配数字与"a m"之间的允许内容(非捕获组,不保留匹配内容):
    • \s*:匹配任意数量的空格
    • [:]?:匹配可选的冒号
    • (?:h\.?s\.?)?:匹配可选的hs/h.s/h.s.,\.?表示该位置的点号可选
  • a m(?=\W|\b):匹配目标"a m",并通过正向断言确保后面是非单词字符或单词边界,避免误替换其他场景的"a m"

测试验证

将输入示例代入函数,可得到符合预期的输出:

# 测试示例1.1
colloquial_hour = "Cerca de las 2: hs a m, hay que salir antes de esas hs a m"
print(repr(fix_am_format(colloquial_hour)))
# 输出:"Cerca de las 2: hs am, hay que salir antes de esas hs a m"

# 测试示例1.2
colloquial_hour = "A medida que avance cerca de la media noche 12: 04 hs a m. Deben ir a las 15 hs a m."
print(repr(fix_am_format(colloquial_hour)))
# 输出:"A medida que avance cerca de la media noche 12: 04 hs am. Deben ir a las 15 hs am."

内容的提问来源于stack exchange,提问作者Matt095

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:31:23