通过正则表达式和java

时间:2016-12-17 14:05:19

标签: java regex

我在网上和我的java代码中有两个不同的结果。

我的输入文字:

Examples:
    #DATA
    |id|author|zip|city|element|
    Odl data - Odl data - Odl data    
    #END

我希望Odl data - Odl data - Odl data更改foo(在我的示例中)。

我的正则表达式是:

#DATA[\s\S].*[\s\S]([\s\S]*)#END

我希望按foo

更改第1组

enter image description here

démoonline:

https://regex101.com/r/Nq9fas/2

我的java代码:

final String regex = "#DATA[\\s\\S].*[\\s\\S]([\\s\\S]*)#END";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

if (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

我想保留第一行(| id | author | zip | city | element |)但我的正则表达式更改所有数据#DATA和#END

1 个答案:

答案 0 :(得分:1)

重点是匹配您需要移除/替换的内容并匹配并捕获您需要保留的内容。

您可以使用replaceFirst

(#DATA\r?\n.*\r?\n)[\s\S]*(#END)

请参阅regex demoIn Java

String res = s.replaceFirst("(#DATA\r?\n.*\r?\n)[\\s\\S]*(#END)", "$1foo\n$2");

注意:如果只有一行要替换,请使用

(#DATA\r?\n.*\r?\n).*([\s\S]*#END)

注2 :如果你有几个这样的&#34;块&#34;在文中,使用[\s\S]的惰性量词,并使用replaceAll代替replaceFirst

(#DATA\r?\n.*\r?\n).*([\s\S]*?#END)
                            ^^