Java正则表达式替换由非字母数字字符包围的字符串

Java正则表达式替换由非字母数字字符包围的字符串,java,regex,string,replace,Java,Regex,String,Replace,我需要一种方法来替换句子中的单词,例如,“嗨,某物”。我需要将其替换为“你好,有什么”。 str.replaceAll(“你好”,“你好”)给我“你好,某物” 我还尝试了str.replaceAll(“.*\\W.*”+“hi”+“.*\\W.*”,“hello”),我在这里的另一个解决方案中看到了这一点,但这似乎也不起作用 实现这一点的最佳方法是什么,以便我只替换没有被其他字母数字字符包围的单词?使用\\b作为单词边界: String regex = "\\bhi\\b"; e、 g 如果你

我需要一种方法来替换句子中的单词,例如,“嗨,某物”。我需要将其替换为“你好,有什么”。
str.replaceAll(“你好”,“你好”)
给我
“你好,某物”

我还尝试了
str.replaceAll(“.*\\W.*”+“hi”+“.*\\W.*”,“hello”)
,我在这里的另一个解决方案中看到了这一点,但这似乎也不起作用


实现这一点的最佳方法是什么,以便我只替换没有被其他字母数字字符包围的单词?

使用
\\b
作为单词边界:

String regex = "\\bhi\\b";
e、 g


如果你要做任何数量的正则表达式,把它作为你最好的新朋友。我推荐得再高也不为过

使用
\\b
作为单词边界:

String regex = "\\bhi\\b";
e、 g


如果你要做任何数量的正则表达式,把它作为你最好的新朋友。我推荐得再高也不为过

在这种情况下,单词边界应该能很好地为您服务(IMO是更好的解决方案)。一种更通用的方法是使用负向前看和向后看:

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

String output=input.replaceAll((?单词边界)在这种情况下应该可以很好地为您服务(IMO是更好的解决方案)。更通用的方法是使用负向前看和向后看:

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

字符串输出=输入。replaceAll(“(?非常好!1+我打赌你熟悉我链接到的教程网站。@Hovercraft:它现在在另一个选项卡中打开:P。但那是因为我总是忘记lookahead/lookahead的语法。非常好!1+我打赌你熟悉我链接到的教程网站。@Hovercraft:它现在在另一个选项卡中打开:P。但那是因为我总是忘记lookahead/lookbehind的语法。我精确地剪切和粘贴代码,这是输出“嗨,有什么”您需要的是
replaceAll
,而不是
replace
,因为后者处理的是文本,而不是正则表达式。更改为replaceAll as标记会修复issue@Bruce:当胖手指。
replace
更改为
replaceAll
否则,不错,我今天亲自学到了新东西+1:)我精确地剪切和粘贴代码,这是输出“嗨,有什么”您需要的是
replaceAll
,而不是
replace
,因为后者处理的是文本,而不是正则表达式。更改为replaceAll as标记会修复issue@Bruce:当胖手指。
replace
更改为
replaceAll
否则,不错,我今天亲自学到了新东西+1:)