如何使用正则表达式替换提案中的单词?

时间:2012-01-20 11:19:10

标签: java regex

我有以下任务:使用正则表达式替换提案中的单词 word 。我制作了以下代码:

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 个答案:

答案 0 :(得分:1)

不确定我是否理解正确。但您可能希望为正则表达式添加单词边界:

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

答案 1 :(得分: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

1234 123 345 123456

但请注意警告,如果您的输入文字已经标记,则您的字词可能不匹配 实施例

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

修改

如果您希望自己的单词以可选.

结尾,请使用此模式
Pattern.compile("\\b(" + words + ")[.]?\\b");

答案 2 :(得分: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>.

那么,这是如何工作的?

  • 正则表达式\b表示“单词边界”,因此"\\bword\\b"将与您的单词匹配(双反斜杠,因为java在反斜杠中吞下其中一个反斜杠)
  • 替换字符串中的
  • $0表示整个匹配

我保持简单,我的使用模式 - 只需使用String API