java - 使用罗马数字删除编号

标签 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 :
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.

最佳答案

像下面这样的东西怎么样Regex :

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

这匹配一个罗马数字,后面跟着 ). 字符。有一篇关于匹配罗马数字的好文章 Regular Expressions Cookbook作者:Steven Levithan,O'Reilly 的 Jan Goyvaerts。

关于java - 使用罗马数字删除编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56147872/

相关文章:

javascript - 电子邮件验证正则表达式需要很长时间才能完成中等长度的字符串

java - 如何在 DataInputStream 上高效地进行正则表达式匹配

java - 这个 Java 对工作问卷的回复有效吗?

java - 如何在没有种族的情况下测试 Future 是否完整?

java - Map .get()、.containsKey() 方法不起作用

java - 如何消除重复的枚举代码?

java - 替换属性文件键中的所有空格

正则表达式检测 IE 5、6、7 和 8,但不检测其他版本

regex - 下面的正则表达式试图匹配什么?

java - Jackson动态Pojo<T>反序列化