2015-07-27 3 views
2

Я пытаюсь соответствовать (II|III|IV|V|VI|VII|VIII|ESQ|.JR|.SR), если я получу совпадение, я должен удалить его или заменить его на "". Мой код:Match roman numbers using regex

String fName=" abc III "; 
fName = fName.replaceAll("(II|III|IV|V|VI|VII|VIII|ESQ|.JR|.SR)", ""); 

Это работает отлично подходит для большинства случаев, но если я дать III или VI я получаю я в своем выходе, который я не хочу. где я иду не так?

+1

Вы должны сказать сличитель быть жадным. – duffymo

+0

жаль, что я не хочу получить ваш комментарий. –

+0

Я знаю - сделайте некоторое исследование регулярных выражений. http://www.java2s.com/Code/Java/Regular-Expressions/Greedy.htm – duffymo

ответ

2

Вы можете использовать:

fName = fName.replaceAll("\\s*(III?|I?V|VI{1,3}|ESQ|\\.?[JS]R)\\s*$", ""); 

Вам нужно бежать точку в регулярном выражении & реорганизовать регулярное выражение, как показано здесь.

RegEx Demo

+0

это решение не подходит для SR | JR, я получаю SR в моей последней строке. –

+0

это все еще не работает для JR и SR –

+0

, например, мой ввод может быть abc .JR или abc .SR или abc JR и II, IIII, IV .. Я должен получить вывод как только abc. Я должен заменить II | III | IV | V | VI | VII | VIII | ESQ | .JR | .SR | SR | JR) –