gpt4 book ai didi

java - 使用正则表达式 Java 行之间的子字符串

转载 作者:行者123 更新时间:2023-12-02 05:00:14 25 4
gpt4 key购买 nike

嗨,我有以下字符串

abc test ...
interface
somedata ...
xxx ...
!
sdfff as ##
example
yyy sdd @# .
!

我有一个要求,我想在包含“interface”或“example”的行与“!”行之间查找内容。
所需的输出如下所示

String[] output= {"somedata ...\nxxx ...\n","yyy sdd @# .\n"} ;

我可以使用 substring 和 iteration 手动执行此操作。但我想使用正则表达式来实现这一点。可能吗?

这是我尝试过的

String sample="abc\ninterface\nsomedata\nxxx\n!\nsdfff\ninterface\nyyy\n!\n";
Pattern pattern = Pattern.compile("(?m)\ninterface(.*?)\n!\n");
Matcher m =pattern.matcher(sample);
while (m.find()) {
System.out.println(m.group());
}

我说得对吗?请提出正确的方法。

编辑:

一个小变化:我想查找“interface”或“example”行与“!”行之间的内容。

我们也可以使用正则表达式来实现这一点吗?

最佳答案

您可以使用(?s) DOTALL 修饰符。

String sample="abc\ninterface\nsomedata\nxxx\n!\nsdfff\ninterface\nyyy\n!\n";
Pattern pattern = Pattern.compile("(?s)(?<=\\ninterface\\n).*?(?=\\n!\\n)");//Pattern.compile("(?m)^.*$");
Matcher m =pattern.matcher(sample);
while (m.find()) {
System.out.println(m.group());
}

输出:

somedata
xxx
yyy

请注意,示例中的输入是不同的。

  • (?<=\\ninterface\\n)断言匹配前面必须是与正向后查找中存在的模式匹配的字符。

  • (?=\\n!\\n)断言匹配后面必须跟有与正向先行中存在的模式匹配的字符。

更新:

Pattern pattern = Pattern.compile("(?s)(?<=\\n(?:example|interface)\\n).*?(?=\\n!\\n)");

关于java - 使用正则表达式 Java 行之间的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28344829/

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