我有一个字符串:“ Foo值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
来做到这一点。
答案 0 :(得分:2)
您可以使用(value\s)([\w\.?]+)
之类的正则表达式进行匹配和分组,然后使用$1
和$2
进行替换。
在您的情况下,$1
代表vaule\s
,$2
代表[\w\.]+
,我们只需要保留$1
并替换$2
< / p>
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
更新,一种更优雅的方法是将正则表达式更改为(?<=value\s)[\w\.?]+
,输出将相同
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
答案 1 :(得分:1)
或者,只是尝试一些新的东西:-p-您可以尝试使用“正向后看”:
setState
如果正则表达式airflow resetdb
前面有“ there”(在“ there”之后带有任何空格字符,而不仅仅是空格),则它将与任何单词匹配