Java正则表达式替换紧跟其后的单词
我有一个字符串:“Foo value 1.1.1” 我想用其他东西替换Java正则表达式替换紧跟其后的单词,java,regex,Java,Regex,我有一个字符串:“Foo value 1.1.1” 我想用其他东西替换1.1.1,比如*** 我尝试了str.replaceAll(“[0-9].[0-9].[0-9].”,“***”),但单词1.1.1可以更改为“1.1”或“1.1.a”或“111”,等等 这个词后面总是跟着“值”这个词。因此,我基本上想替换value后面的单词,我如何使用replaceAll来替换它。您可以使用类似regex的(value\s)([\w\.?]+)来匹配和分组它,然后使用$1和$2来替换它 在您的情况下,$1
1.1.1
,比如***
我尝试了str.replaceAll(“[0-9].[0-9].[0-9].”,“***”)
,但单词1.1.1
可以更改为“1.1”或“1.1.a”或“111”,等等
这个词后面总是跟着“值”这个词。因此,我基本上想替换
value
后面的单词,我如何使用replaceAll
来替换它。您可以使用类似regex的(value\s)([\w\.?]+)
来匹配和分组它,然后使用$1
和$2
来替换它
在您的情况下,$1
代表vaule\s
和$2
代表[\w\.]+
,我们只需要保留$1
并替换$2
String str1 = "Foo value 1.1.1".replaceAll("(value\\s)([\\w\\.?]+)", "$1AAA");
String str2 = "Foo value 1.1".replaceAll("(value\\s)([\\w\\.?]+)", "$1BBB");
String str3 = "Foo value Stackoverflow".replaceAll("(value\\s)([\\w\\.?]+)", "$1CCC");
System.out.println(str1);//output: Foo value AAA
System.out.println(str2);//output: Foo value BBB
System.out.println(str3);//output: Foo value CCC
更新,一个更优雅的方法是将正则表达式更改为
(?),或者,只是尝试一些新的东西:-p-您可以尝试使用“正向查找”:
groovy:000>a=“你好,Moi”
groovy:000>p=java.util.regex.Pattern.compile(“?
String str1 = "Foo value 1.1.1".replaceAll("(?<=value\\s)[\\w\\.?]+", "AAA");
String str2 = "Foo value 1.1".replaceAll("(?<=value\\s)[\\w\\.?]+", "BBB");
String str3 = "Foo value Stackoverflow".replaceAll("(?<=value\\s)[\\w\\.?]+", "CCC");
System.out.println(str1);//output: Foo value AAA
System.out.println(str2);//output: Foo value BBB
System.out.println(str3);//output: Foo value CCC
groovy:000> a = "hello there Moi"
groovy:000> p = java.util.regex.Pattern.compile("(?<=there\\s)\\w+")
groovy:000> m = p.matcher(a)
groovy:000> m.replaceAll("John")
===> hello there John