2012-01-20 2 views
0

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

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

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

ответ

1

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

p = Pattern.compile("\b" + word + "\b"); 
+0

к сожалению, она не работает – user1134602

+0

ВАЗы t не работает? Подробности, пожалуйста. –

+0

Текст результата не содержит никаких обрамленных слов. – user1134602

1

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

\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 

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

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

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

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

Pattern.compile("\\b(" + words + ")[.]?\\b"); 
+0

Спасибо. У меня есть 1 вопрос - он будет работать правильно, если у меня есть источник «1234 123.» и слово «123» (результат должен быть «1234 .»). Правильно? – user1134602

+0

Нет '123.' рассматривается как одно слово –

+0

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

0

Держите вещи просто:

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

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