Java正则表达式替换一个接一个的单词

时间:2018-07-20 01:55:49

标签: java regex

我有一个字符串:“ 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来做到这一点。

2 个答案:

答案 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”之后带有任何空格字符,而不仅仅是空格),则它将与任何单词匹配