C#正则表达式用于匹配文本中的罗马尼亚数字

时间:2016-09-18 19:01:19

标签: regex

我尝试实现匹配文本中罗马尼亚数字的正则表达式。 这是我的正则表达式:

x

所以它的意思是'开始字符串或空格一次或多次,比任何xivXIV一次或多次,然后空格一次或多次或字符串结束。'

但它似乎不适合我。 F.E.我有一个简单的字符串^ | \s+[xivXIV]+\s+ | $ ,它与此模式不匹配。

编辑:建议的帖子是关于字符串文字如何匹配罗马尼亚语数字,而不是我想“智能”从文本中提取这些文字,所以它应该处理像 'xiv'它不应该'visit',但如果'vi'它应该'ix table of contents'

编辑2 :感谢所有回复,exp应为:

'ix'

注意:在我的情况下,我只需要处理XIV文字(不是完整的罗马尼亚语系统),因为我需要一些更简单的解决方案

1 个答案:

答案 0 :(得分:1)

您可以使用this Q&A中的答案进行调整,使其与其他文本中嵌入的子字符串相匹配:

accepted answer有这个:

^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$

通过分词符(^)替换开始/结束锚点($\b):

\bM{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})\b

请注意,您在第二个问题编辑中提到的更简单\b[xivXIV]+\b将接受无效的罗马数字,如:

IXI
XXXXX

并且不会认出这些有效的:

CM
LX

在稍后编辑你的问题时,你写道你只想要"来处理XIV文字(不是完整的罗马尼亚语[sic]系统)" 。然后你仍然可以使用上面提到的正则表达式的相应部分来排除这三个字母的无效组合:

\bX{0,3}(IX|IV|V?I{0,3})\b

注意:对于不区分大小写的情况,您可以添加i修饰符。