Как заменить слова в предложении с помощью регулярных выражений? - PullRequest
0 голосов
/ 20 января 2012

У меня есть следующая задача: заменить слово в слово слово в предложении с помощью регулярных выражений. Я сделал следующий код:

p=Pattern.compile(word);
m=p.matcher(source);    
source=m.replaceAll("<b><i>"+word+"</i></b>"); 

"source" -source string, "word" - поиск слова. Но это не работает. Например, есть строка «1234 123.». Мне нужно заменить слово «123» (слово может быть заключено в «.» Или «» (пробел)) в этой строке, но я сделал "<b><i>123</i></b>4 <b><i>123</i></b>", что неверно. Как я должен изменить свой код? Спасибо

Ответы [ 3 ]

1 голос
/ 20 января 2012

Это должно помочь. Обратите внимание, что \\ используется для экранирования \. Код ниже позволяет выделить несколько слов.

\b соответствует границам слов, поэтому, если вы заключите слово в \b, регулярное выражение будет соответствовать целому слову.

    String source="1234 123 345 123456";
    String words="123|345";
    Pattern p = Pattern.compile("\\b(" + words + ")\\b");
     Matcher m = p.matcher(source);    
    source=m.replaceAll("<b><i>$1</i></b>"); 
    System.out.println(source);

выход

1234 <b><i>123</i></b> <b><i>345</i></b> 123456

1234 123 345 123456

Но учтите предостережение , что если ваш входной текст уже размечен, ваши слова могут не совпадать Ex

String source="1<b><i>23</i></b>";//This does not match 123 !

Редактировать

Используйте этот шаблон, если вы ожидаете, что ваши слова оканчиваются на необязательный .

Pattern.compile("\\b(" + words + ")[.]?\\b");
1 голос
/ 20 января 2012

Не уверен, правильно ли я вас понимаю.Но вы, вероятно, хотите добавить границы слова к своему регулярному выражению:

p = Pattern.compile("\b" + word + "\b");
0 голосов
/ 20 января 2012

Не усложняйте:

source.replaceAll("\\b" + word + "\\b", "$0 <b><i>$0</i></b>");

Вот тест:

public static void main(String[] args) {
    String source = "1234 123.";
    String word = "123";
    String newSource = source.replaceAll("\\b" + word + "\\b", "$0 <b><i>$0</i></b>");
    System.out.println(newSource);
}

Вывод:

1234 123 <b><i>123</i></b>.

Итак, как это работает?

  • Regex \b означает «граница слова», поэтому "\\bword\\b" будет соответствовать вашему слову (двойная обратная косая черта, потому что Java проглотит одну из них в побеге для обратной косой черты)
  • $0 взаменить строку означает полное совпадение

Я тоже все упростил, используя , а не , используя шаблон - просто используйте API-интерфейс String

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...