代码之家  ›  专栏  ›  技术社区  ›  Digital God

Python正则表达式。匹配并替换罗马数字

  •  3
  • Digital God  · 技术社区  · 9 年前

    需要一些关于正则表达式的帮助。 我想匹配一些罗马数字,并将其替换为阿拉伯语。

    首先,如果使用 (IX|IV|V?I{0,3}) 以匹配罗马数字(从1到9)。 然后,我在空格(前面有一些文本)或空白(字符串的开始/结束)中添加一些逻辑 (?:^|\s)(?:\s|$)

    所以最后我 (?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)

    它匹配所有这些变体:

    1. 部分文本VI
    2. 九、我们来了
    3. 另一个III文本

    如果我用罗马阿拉伯地图定义dict {'iii': 3, 'IX': 9} -如何用dict中的值重新分解匹配?此外,它只匹配第一个accur,即 some V then III 我只得到 V

    1 回复  |  直到 9 年前
        1
  •  2
  •   timgeb    9 年前

    此外,它只匹配第一个accur,即在某些V中,然后在III中,我只得到V

    我想你正在使用 re.match re.search 这只会给你一个结果。我们将使用 re.sub 解决你的主要问题,这样这就不是问题了。 re.sub 可以接电话。我们将任何匹配项替换为字典中的相应值。使用

    re.sub(your_regex, lambda m: your_dict[m.group(1)], your_string)
    

    这假设任何可能的匹配 dict 。如果没有,请使用

    re.sub(your_regex, lambda m: your_dict[m.group(1)] if m.group(1) in your_dict else m.group(1), your_string)