Java 使用正则表达式匹配罗马数字

Java 使用正则表达式匹配罗马数字,java,regex,Java,Regex,我正在尝试匹配(II | III | IV | V | VI | VII | VIII | ESQ | JR | SR),如果我得到匹配,我应该删除它或用替换它。 我的代码是: String fName=" abc III "; fName = fName.replaceAll("(II|III|IV|V|VI|VII|VIII|ESQ|.JR|.SR)", ""); 这在大多数情况下都很好,但如果我给出III或VI,我会得到我不想要的输出。我哪里出错了?您可以使用: fName = fNam

我正在尝试匹配
(II | III | IV | V | VI | VII | VIII | ESQ | JR | SR)
,如果我得到匹配,我应该删除它或用
替换它。
我的代码是:

String fName=" abc III ";
fName = fName.replaceAll("(II|III|IV|V|VI|VII|VIII|ESQ|.JR|.SR)", "");
这在大多数情况下都很好,但如果我给出III或VI,我会得到我不想要的输出。我哪里出错了?

您可以使用:

fName = fName.replaceAll("\\s*(III?|I?V|VI{1,3}|ESQ|\\.?[JS]R)\\s*$", "");
你需要避开正则表达式中的点&像这里所示重构你的正则表达式


你需要告诉匹配者要贪婪。对不起,我听不到你的评论。我知道-研究一下正则表达式。此解决方案与SR | JR不匹配,我在最后一个字符串中得到SR。例如,我的输入可能是abc.JR或abc.SR或abc JR和II,iii,IV。。我应该只作为abc获得输出。我应该取代二|三|四|五|六|七|八| ESQ | JR | SR | JR)