我需要一种方法来替换所有出现的数字,这些数字表示为字符串中的数字及其等效的罗马数字。
示例:
My 3 Top Tips: Part 19
应输出My III Top Tips: Part XIX
Se7en
应输出Se7en
(因为字符7
不是')')这项工作似乎是roman。不幸的是,它不会接受包含文本和数字的字符串。
我的想法是:
split()
文字word
word
一个数字,如果是,请使用roman
这看起来很混乱,容易出错,而且不是非常pythonic。有什么更好的方法呢?有可能是正则表达式或列表理解,还是两者的结合?
答案 0 :(得分:3)
要查找不属于较大字词的数字,请使用带word boundary anchors的正则表达式:
regex = re.compile(r"\b\d+\b")
仅与您示例中的3
和19
匹配,但不会与7
匹配。
因此,使用this answer中的write_roman()
,您可以
def repl(match):
return write_roman(int(match.group(0)))
print(regex.sub(repl, "My 3 Top Se7en Tips: Part 19"))
并将获得
My III Top Se7en Tips: Part XIX