我正在尝试编写一个正则表达式来匹配常规数字(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
请注意,我在正则表达式中使用了 x
(扩展模式),这样正则表达式将忽略所有空格,这允许您在多个交替之间进行适当的缩进,使您的正则表达式更具可读性。我不知道罗马数字的所有排列,所以我建议您重新检查每一个排列。
关于python - 匹配数字的正则表达式(正则和罗马),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60968023/