使用罗马数字删除编号

时间:2019-05-15 11:06:50

标签: java regex

我正在尝试从包含标题,段落等的文本中删除有效的罗马数字(编号)。

我正在使用此 regex

Pattern ROMAN = Pattern.compile("^[([]‌?x{0,3}(i[xv]‌|v?i{0,3})[)\.]/]{1,2}", Pattern.CASE_INSENSITIVE);

尽管它也匹配空括号。

我要删除的是以下内容:

Input :
iv. foo foo foo.
Output:
foo foo foo.
Input :
v) foo foo foo.
Output:
foo foo foo.

但是在不使用它们进行编号时也什么都不做:

Input :
foo foo foo i) foo v) .
Output:
foo foo foo i) foo v) .

正则表达式应匹配的另一个示例: iv) X) ix/ V/ x. IV.

2 个答案:

答案 0 :(得分:1)

类似于以下Regex的事情:

^((?=[mdclxvi])m*(c[md]|d?c{0,3})(x[cl]|l?x{0,3})(i[xv]|v?i{0,3})(?:\)|\.))

这与罗马数字匹配,后跟).个字符。 O'Reilly的Jan Goyvaerts的Steven Levithan有一篇不错的文章,介绍了如何匹配罗马数字Regular Expressions Cookbook

答案 1 :(得分:1)

以下正则表达式可以实现:

        "query": "(pizza oven and\/or pizza) OR (bread)"
                                 ^
                                 |

See explanation...

enter image description here

Here you can visualize your expression...