gpt4 book ai didi

java - 解析包含双引号的字符串

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

我有一个相对简单的java问题。我有一个如下所示的字符串:

"Anderson,T",CWS,SS

我需要以我拥有的方式解析它

Anderson,T    
CWS
SS

全部作为单独的字符串。

谢谢!

最佳答案

这是一个解决方案,它将捕获带引号的字符串、删除空格并匹配空项:

public static void main(String[] args) {
String quoted = "\"(.*?(?<!\\\\)(?:\\\\\\\\)*)\"";
Pattern regex = Pattern.compile(
"(?:^|(?<=,))\\s*(" + quoted + "|[^,]*?)\\s*(?:$|,)");

String line = "\"Anderson,T\",CWS,\"single quote\\\"\", SS ,,hello,,";
Matcher m = regex.matcher(line);
int count = 0;
while (m.find()) {
String s = m.group(2) == null ? m.group(1) : m.group(2);
System.out.println(s);
count++;
}
System.out.printf("(%d matches found)%n", count);
}

我将模式的引用部分分开,以使其更容易理解。捕获组 1 是带引号的字符串,2 是每隔一个匹配项。

要分解整体模式:

  1. 查找行首或前一个逗号 (?:^|(?<=,)) (不要捕捉)
  2. 忽略 0+ 个空格 \\s*
  3. 查找带引号的字符串或不带逗号的字符串 (" + quoted + "|[^,]*?)(非逗号匹配是非贪婪的,因此它不会占用任何后续空格)
  4. 再次忽略 0+ 空格 \\s*
  5. 查找行尾或逗号 (?:$|,) (不要捕捉)

要分解引用模式:

  1. 寻找开盘报价\"
  2. 开始群组捕获(
  3. 获取任意字符的最小匹配.*?
  4. 匹配 0+偶数个反斜杠 (?<!\\\\)(?:\\\\\\\\)* (以避免匹配带有或不带前面转义反斜杠的转义引号)
  5. 关闭捕获组 )
  6. 比赛结束报价 \"

关于java - 解析包含双引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58984094/

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