我试图实现正则表达式,这将匹配罗马尼亚语数字的文本。这是我的准则:
^ | \s+[xivXIV]+\s+ | $因此,它的意思是“开始字符串或空格一次或多次,比任何一次或多次,然后空格一次或多次或字符串结束。”
但它似乎对我不起作用。F.e.我有一个简单的字符串'xiv',它与这个模式不匹配。
编辑:建议文章是关于如果字符串文字与罗马尼亚语数字匹配,我想要“智能”从文本中提取这些文字,所以它应该处理像'visit'这样的情况,它不应该使用'vi',但是如果'ix table of contents'应该使用'ix'。
编辑2:感谢所有的回复,exp应该是:
\b[xivXIV]+\b注意:在我的部分情况下,我只需要处理XIV文本(不是完整的罗马尼亚系统),这是因为我需要一些更简单的解决方案。
发布于 2016-09-18 19:15:12
您可以使用来自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在稍后对你的问题的编辑中,你写道,你只想“处理十四种文字(而不是完整的旋转系统)”。不过,您还可以使用上面提到的正则表达式的相应部分来排除这三个字母的无效组合:
\bX{0,3}(IX|IV|V?I{0,3})\b注意:对于不区分大小写的情况,可以添加i修饰符.
https://stackoverflow.com/questions/39561492
复制相似问题