python - 匹配数字的正则表达式(正则和罗马)

标签 python regex

我正在尝试编写一个正则表达式来匹配常规数字(1、2、42...)和罗马数字(X、VII...)。

但是the one I've currently wrote :

\b((?=[MDCLXVI])M{0,3}(C[MD]|D?C{0,3})(X[CL]|L?X{0,3 })(I[XV]|V?I{0,3}))\b|\b\d+\b

比预期更匹配。 它有 9 场比赛,而我预计只有 4 场:

  • 十二
  • 2
  • 12

我该如何解决?

最佳答案

您真的不需要在您的正则表达式中进行任何前瞻。

您的正则表达式可以简化并重构为:

/
\b
   (?:
      [MDCLXVI]M{0,3}C[MD]
      |
      D?C{0,3}X[CL]
      |
      L?X{0,3}I[XV]
      |
      [XV]I{0,3}
      |
      I{1.3}
      |
      \d+
   )
\b
/gix

Updated RegEx Demo

请注意,我在正则表达式中使用了 x(扩展模式),这样正则表达式将忽略所有空格,这允许您在多个交替之间进行适当的缩进,使您的正则表达式更具可读性。我不知道罗马数字的所有排列,所以我建议您重新检查每一个排列。

关于python - 匹配数字的正则表达式(正则和罗马),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60968023/

相关文章:

python - 如何将一个大数字拆分成单个数字?

python - 在 Python 类中动态定义实例字段

c# - 这个正则表达式的名称是什么?

c# - "hidden"正则表达式?

python - 如何使用正则表达式来匹配年份和月份?

python - 反向代理: Flask app with Bokeh server on Nginx

python json加载设置编码为utf-8

python - 为什么在 Windows Vista 64 中使用 easy_install 和 Python 2.7 安装 Pylons 1.0 的最后一行会出现错误?

regex - Ansible regex_replace-ho 提取特定值

javascript - 删除javascript中各种范围内的Unicode字符