单一正则表达式,用于从文本文件中过滤罗马数字

时间:2010-04-05 09:44:49

标签: regex roman-numerals

我陷入了一个问题,即只允许一次正则表达式传递(一些旧的硬代码)。我需要罗马数字的正则表达式。

我尝试过标准的^(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$,但问题是它还允许null('')值。

有没有办法检查是否有问题?

2 个答案:

答案 0 :(得分:2)

要求必须至少包含一个字符,您可以在正则表达式的开头使用lookahead (?=.)

^(?=.)(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])$

另一个解决方案是单独测试你的字符串不是空字符串。

答案 1 :(得分:1)

我喜欢这个:

\b(?=[MDCLXVI]+\b)M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b