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

时间:2016-01-05 16:48:27

标签: python regex roman-numerals

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

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

向一个空格(前面带有一些文本)或者没有任何内容(字符串的开头/结尾)添加一些逻辑

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

它符合所有这些变体:

  1. 一些文字VI
  2. IX这里我们
  3. 另一个III文本
  4. 如果我用罗马 - 阿拉伯语地图{'iii': 3, 'IX': 9}定义dict - 如何使用dict的值重新匹​​配?它也仅匹配第一个accur,即在some V then III我只获得V

1 个答案:

答案 0 :(得分:2)

  

它也只匹配第一个accur,即在某些V然后III我只得到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)