gpt4 book ai didi

java - 正则表达式匹配多行括号中的文本

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:16:15 24 4
gpt4 key购买 nike

我有以下文字:

node [
id 2
label "node 2"
thisIsASampleAttribute 43
]
node [
id 3
label "node 3"
thisIsASampleAttribute 44
]

我想将每个节点及其内容分组在括号内,例如:

    node [
id 2
label "node 2"
thisIsASampleAttribute 43
]

不过,我将使用以下代码对整个文本进行分组:

Pattern p = Pattern.compile("node \\[\n(.*|\n)*?\\]", Pattern.MULTILINE);

Matcher m = p.matcher(text);

while(m.find())
{
System.out.println(m.group());
}

编辑文本:

    node [\n" +
" id 2\n" +
" label \"node 2\"\n" +
" thisIsASampleAttribute 43\n" +
" ]\n" +
" node [\n" +
" id 3\n" +
" label \"node 3\"\n" +
" thisIsASampleAttribute 44\n" +
" ]\n"

最佳答案

问题是您只使用 (.*|\n)*? 捕获最后一个字符(因为 .? 不在捕获组内).

您可以将捕获组更改为非捕获组,然后用捕获组将其和 *? 包装起来,以捕获所有匹配项 ((?:.*? |\n)*?).

Example Here

Pattern p = Pattern.compile("node \\[\\n((?:.*?|\\n)*?)\\]", Pattern.MULTILINE);
Matcher m = p.matcher(text);
while(m.find())
{
System.out.println(m.group(1));
}

但是,上面的正则表达式效率相对较低。一种可能更好的方法是将非 ] 字符与否定字符集 ([^\]]*) 匹配。

Example Here

Pattern p = Pattern.compile("node \\[\\n([^\\]]*)\\]", Pattern.MULTILINE);
Matcher m = p.matcher(text);
while(m.find())
{
System.out.println(m.group(1));
}

关于java - 正则表达式匹配多行括号中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958420/

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