gpt4 book ai didi

java - 除特定情况外如何匹配单个字符

转载 作者:行者123 更新时间:2023-12-02 00:13:08 24 4
gpt4 key购买 nike

我有一个字符串,我想在每个分号处将其分成几个部分 ; .

我正在使用JAVA String.split(regex)为此,创建一个字符串数组。

示例:

string 1;
string 2;
string 3;
string 4 (
substring 1;
substring 2;
substring 3;
);
string 4;

我正在使用line.split("\\s*;\\s*");现在...

但是,正如预期但不想要的那样,给了我 ["string 1", "string 2", "string 3", "string 4 (\nsubstring 1", "substring 2", "substring 3", ")", "string 4", ""] .

那么我如何匹配每个 ;所以我可以分割它,除了括号内的那些(子字符串后面的)?

编辑:

我确实设法创建了一个正则表达式来匹配“;”在括号内,但不在括号外...但在使用逻辑并转换 ~(a^b) 之后至~av~b (德摩根法)我确实制作了一个正则表达式来匹配“;”括号外。

但是它仍然不起作用,并且仍然在每个分号处中断......这是 Java 本身的问题吗?

当前模式:((?<![\S\s]*?\([\S\s]*?)|(?![\S\s]*?\)[\S\s]*?));

最佳答案

我确信一些 Java 专业人士有比正则表达式更好的解决方案,但这可能有点接近于研究:

.*\((?:\s*(?:[^\r\n]*;)\s*)+\);|[^\r\n]+

我猜您可能想要修剪并将其推送到数组。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

public static void main(String[] args){

final String regex = ".*\\((?:\\s*(?:[^\\r\\n]*;)\\s*)+\\);|[^\\r\\n]+";
final String string = "string 1;\n"
+ "string 2;\n"
+ "string 3;\n"
+ "string 4 (\n"
+ " substring 1;\n"
+ " substring 2;\n"
+ " substring 3;\n"
+ ");\n"
+ "string 4;\n"
+ "string 1;\n"
+ "string 2;\n"
+ "string 3;\n"
+ "string 4 (\n"
+ " substring 1;\n"
+ " substring 2;\n"
+ " substring 3;\n"
+ ");\n"
+ "string 4;";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (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));
}
}

}
}

输出

Full match: string 1;
Full match: string 2;
Full match: string 3;
Full match: string 4 (
substring 1;
substring 2;
substring 3;
);
Full match: string 4;
Full match: string 1;
Full match: string 2;
Full match: string 3;
Full match: string 4 (
substring 1;
substring 2;
substring 3;
);
Full match: string 4;
<小时/>

如果您想简化/修改/探索表达式,regex101.com 的右上角面板已对此进行了解释。 。如果您愿意,也可以在 this link 观看,它如何与一些示例输入相匹配。

<小时/>

关于java - 除特定情况外如何匹配单个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58107829/

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