关于python:用罗马数字替换数字

Replace numbers with Roman numerals

我需要一种方法来用罗马数字等价物替换字符串中以数字表示的所有出现的数字。

示例:

  • My 3 Top Tips: Part 19应输出My III Top Tips: Part XIX
  • Se7en应输出Se7en(因为字符7不是一个‘字’)

这项工作的最佳方案似乎是罗马人。不幸的是,它不接受同时包含文本和数字的字符串。

我的想法是:

  • split()正文
  • 迭代每个word
  • word是一个数字吗?如果是,用roman替换它。
  • 再次合并列表
  • 这看起来杂乱无章,容易出错,而且不是很像Python。更好的方法是什么?是否可以使用regex或list理解,或者两者的组合?


    要查找不属于较大单词的数字,请使用带有单词边界锚定的regex:

    1
    regex = re.compile(r"\b\d+\b")

    在您的示例中,只匹配319,而不匹配7

    所以,使用这个答案中的write_roman(),你可以做到

    1
    2
    3
    4
    def repl(match):
        return write_roman(int(match.group(0)))

    print(regex.sub(repl,"My 3 Top Se7en Tips: Part 19"))

    会得到

    1
    My III Top Se7en Tips: Part XIX