2010-12-28 1 views
0

Для моего примера я пытаюсь заменить ВСЕ случаи «« »и« а »в строке пробелом. Включая случаи, когда эти слова рядом с символами, такие как кавычки и других знаков препинанияAndroid - Java - вопрос о регулярном выражении - несоответствующие слова подряд

String oldString = "A test of the exp." 
Pattern p = Pattern.compile("(((\\W|\\A)the(\\W|\\Z))|((\\W|\\A)a(\\W|\\Z)))",Pattern.CASE_INSENSITIVE); 
Matcher m = p.matcher(oldString); 
newString = m.replaceAll(" "); 

«испытание ехр». возвращает «тест exp». - Да!

«Испытание a exp.» возвращает «тест exp». - Буо!

«В этом тесте есть». возвращает «а в этом тесте является -. DoubleBoooo

Любая помощь будет принята с благодарностью Благодаря

+0

Не нужно ставить «Android - Java - регулярное выражение» как часть вопроса, для чего нужны теги. –

ответ

1
String resultString = subjectString.replaceAll("\\b(?:a|the)\\b", " "); 

\b матчи на границе слова (то есть в начале или в конце!.! слово, где «слово» представляет собой последовательность алфавитно-цифровых символов).

(?:...) не является захват группы, необходимо, чтобы отделить альтернативные слова (в данном случае a и the) от окружающих якорных пограничных якорей.

+0

re '\ b': http://www.regular-expressions.info/wordboundaries.html –

+0

Да! Благодарим за дополнительную информацию о группе (?: ...), не участвующей в захвате. После прочтения: http://www.regular-expressions.info/brackets.html Теперь я знаю, что это делает мое выражение немного более эффективным. Я также все еще использую Pattern + Matcher, так как я буду использовать это выражение несколько раз, и документация говорит, что он более эффективен, чем функции String, особенно если один и тот же шаблон следует использовать несколько раз. Еще раз спасибо! – EddieB

0
Pattern.compile("(\\bthe\\b)|(\\ba\\b)",Pattern.CASE_INSENSITIVE); 
1

Или в упрощенном виде @Robokop soln.

Pattern.compile("(\\b(the|a)\\b)",Pattern.CASE_INSENSITIVE); 

или

Pattern.compile('\b(the|a)\b',Pattern.CASE_INSENSITIVE); 

Не уверен, что квотирование в Java.

+0

Первая версия верна. Строковые литералы Java всегда двойные кавычки, и вам всегда нужно избегать обратных косых черт, если вы хотите, чтобы они появлялись в регулярном выражении. –

+0

Отлично работает! Спасибо! – EddieB

Смежные вопросы