需要一些正则表达式的帮助。 我想匹配一些罗马数字并将其替换为阿拉伯语。
首先,如果使用(IX|IV|V?I{0,3})
来匹配罗马数字(从1到9)。
然后我用(?:^|\s)(?:\s|$)
最后我是(?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)
它符合所有这些变体:
如果我用罗马 - 阿拉伯语地图{'iii': 3, 'IX': 9}
定义dict - 如何使用dict的值重新匹配?它也仅匹配第一个accur,即在some V then III
我只获得V
答案 0 :(得分:2)
它也只匹配第一个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)