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|$)
它匹配所有这些变体:
- 一些文字VI
- IX 我们到了
- 另一个三文
如果我用罗马-阿拉伯语映射定义字典 {'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.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)
需要一些有关正则表达式的帮助。 我想匹配一些罗马数字并将它们替换为阿拉伯数字。
首先如果用(IX|IV|V?I{0,3})
来匹配罗马数字(从1到9)。
然后我用 (?:^|\s)(?:\s|$)
最后我 (?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)
它匹配所有这些变体:
- 一些文字VI
- IX 我们到了
- 另一个三文
如果我用罗马-阿拉伯语映射定义字典 {'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.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)