gpt4 book ai didi

java - 通过正则表达式和java更改文件的一部分

转载 作者:行者123 更新时间:2023-11-30 06:59:22 25 4
gpt4 key购买 nike

在线正则表达式和我的 java 代码之间有 2 个不同的结果。

我的输入文本:

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

我想通过 foo 更改 Odl 数据 - Odl 数据 - Odl 数据(在我的示例中)。

我的正则表达式是:

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

我想通过 foo 更改组 1

enter image description here

在线演示:

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 之间的所有数据

最佳答案

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

您可以使用 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");

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

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

注释 2:如果文本中有多个这样的“ block ”,请在 [\s\S] 中使用惰性量词,并与 replaceAll 一起使用 而不是 replaceFirst:

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

关于java - 通过正则表达式和java更改文件的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com