Java 删除使用罗马数字的编号

Java 删除使用罗马数字的编号,java,regex,Java,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

我试图从包含标题、段落等的文本中删除有效的罗马数字(编号)

我正在使用这个正则表达式:

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 :
foo foo foo i) foo v) .
Output:
foo foo foo i) foo v) .
正则表达式应匹配的另一个示例:
iv)
X)
ix/
V/

x.
IV.

下面的例子怎么样:


这与后跟
字符的罗马数字匹配。O'Reilly的Steven Levithan,Jan Goyvaerts写了一篇关于匹配罗马数字的好文章。

下面的正则表达式可以做到这一点:

^\s*(?=[MDCLXVI])M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV)[.)/]


数字是否需要有效?否则您可以只使用
/^[IVXLCM]+[)。]/i
它们是预有效的数字,因此是的,我认为正则表达式应该只匹配有效的数字。请注意:建议的正则表达式需要以不区分大小写的方式应用。例如,通过在前面添加
(?i)
,或者使用
Pattern.compile(regex,Pattern.CASE\u不区分大小写)
不客气,无论如何,回答得很好。你提供的链接也非常有用(至少是你可以自由阅读的部分):)我觉得奥莱利版非常有用。我推荐那些书。谢谢@Norbert,我想知道是否有拉丁语
[a-z][a-z]
而不是罗马数字或数字或拉丁字母,例如:
3。a) 
(a)
如何做到这一点?您的正则表达式将是
^\s*[a-zA-Z]+[]/]
^((?=[mdclxvi])m*(c[md]|d?c{0,3})(x[cl]|l?x{0,3})(i[xv]|v?i{0,3})(?:\)|\.))
^\s*(?=[MDCLXVI])M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV)[.)/]