用罗马数字替换数字

时间:2015-10-30 00:09:14

标签: python regex algorithm

我需要一种方法来替换所有出现的数字,这些数字表示为字符串中的数字及其等效的罗马数字。

示例:

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

这项工作似乎是roman。不幸的是,它不会接受包含文本和数字的字符串。

我的想法是:

  1. split()文字
  2. 迭代每个word
  3. word一个数字,如果是,请使用roman
  4. 替换它
  5. 再次将列表合并
  6. 这看起来很混乱,容易出错,而且不是非常pythonic。有什么更好的方法呢?有可能是正则表达式或列表理解,还是两者的结合?

1 个答案:

答案 0 :(得分:3)

要查找不属于较大字词的数字,请使用带word boundary anchors的正则表达式:

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

仅与您示例中的319匹配,但不会与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