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

Python regex. Match and replace roman numerals

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

首先如果用(IX|IV|V?I{0,3})来匹配罗马数字(从1到9)。 然后我用 (?:^|\s)(?:\s|$)

添加一些逻辑到 space (之前有一些文本)或什么都没有(begin/end 字符串)

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

它匹配所有这些变体:

  1. 一些文字VI
  2. IX 我们到了
  3. 另一个三文

如果我用罗马-阿拉伯语映射定义字典 ​​{'iii': 3, 'IX': 9} - 如何用字典中的值重新匹​​配?它也只匹配第一个 accur,即在 some V then III 中我只得到 V

Also it matches only first accur, i.e. in some V then III i get only V

我假设您使用的是 re.matchre.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)