2012-04-28 53 views
1

我需要一种方法来替换句子中的单词,例如“嗨,某事”。我需要用"hello, something"替换它。 str.replaceAll("hi", "hello")给我"hello, somethellong"Java正则表达式替换由非字母数字字符包围的字符串

我也试过str.replaceAll(".*\\W.*" + "hi" + ".*\\W.*", "hello"),我在这里看到另一个解决方案,但是这似乎并不奏效。

达到这个目的的最佳方法是什么,所以我只替换没有被其他字母数字字符包围的单词?

回答

4

在这种情况下,词语界限应该很好地服务于你(IMO是更好的解决方案)。更一般的方法是使用负先行和回顾后:

String input = "ab, abc, cab"; 
String output = input.replaceAll("(?<!\\w)ab(?!\\w)", "xx"); 
System.out.println(output); //xx, abc, cab 

此搜索事件“AB”未由另一字字符之前或之后。您可以换出任意正则表达式的“\ w”(当然,由于正则表达式引擎不允许无限制的查找)。

+0

非常好! 1+我敢打赌你对我已链接的教程网站很熟悉。 – 2012-04-28 16:32:30

+0

@ Hovercraft:它现在在另一个选项卡中打开:P。但那是因为我总是忘记了lookahead/lookbehind的语法。 – 2012-04-28 16:34:03

2

使用\\b word边界:

String regex = "\\bhi\\b"; 

例如,

String text = "hi, something"; 
    String regex = "\\bhi\\b"; 
    String newString = text.replaceAll(regex, "hello"); 

    System.out.println(newString); 

如果你打算做正则表达式的任何量,使这个Regular Expressions Tutorial你最好的朋友。我不能太高度推荐它!

+0

我把这一个到我的IDE,它似乎并没有工作 – 2012-04-28 16:32:37

+0

@布鲁斯:没有工作如何?你能提供更多的信息吗? – 2012-04-28 16:33:08

+0

我准确地剪切和粘贴代码,这是输出“嗨,东西” – 2012-04-28 16:33:31