我在网上和我的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
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
答案 0 :(得分:1)
重点是匹配您需要移除/替换的内容并匹配并捕获您需要保留的内容。
您可以使用replaceFirst
和
(#DATA\r?\n.*\r?\n)[\s\S]*(#END)
请参阅regex demo。 In 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)
^^