需要一些关于正则表达式的帮助。 我想匹配一些罗马数字,并将其替换为阿拉伯语。
首先,如果使用 (IX|IV|V?I{0,3}) 以匹配罗马数字(从1到9)。 然后,我在空格(前面有一些文本)或空白(字符串的开始/结束)中添加一些逻辑 (?:^|\s)(?:\s|$)
(IX|IV|V?I{0,3})
(?:^|\s)(?:\s|$)
所以最后我 (?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)
(?:^|\s)(IX|IV|V?I{0,3})(?:\s|$)
它匹配所有这些变体:
如果我用罗马阿拉伯地图定义dict {'iii': 3, 'IX': 9} -如何用dict中的值重新分解匹配?此外,它只匹配第一个accur,即 some V then III 我只得到 V
{'iii': 3, 'IX': 9}
some V then III
V
此外,它只匹配第一个accur,即在某些V中,然后在III中,我只得到V
我想你正在使用 re.match 或 re.search 这只会给你一个结果。我们将使用 re.sub 解决你的主要问题,这样这就不是问题了。 re.sub 可以接电话。我们将任何匹配项替换为字典中的相应值。使用
re.match
re.search
re.sub
re.sub(your_regex, lambda m: your_dict[m.group(1)], your_string)
这假设任何可能的匹配 dict 。如果没有,请使用
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)