gpt4 book ai didi

java - 正则表达式拆分除指定子字符串以外的字符串

转载 作者:行者123 更新时间:2023-12-01 13:37:12 27 4
gpt4 key购买 nike

我目前正在尝试用 Java 中的空格分割字符串,除了第一个和最后一个双引号之间的所有内容(这是一个特定情况,它们保证存在)。我对正则表达式相当陌生,但这是我在第一个和最后一个引号中找到子字符串的想法:

regex = ((?<=\").*(?=\"))
我已经在 https://regex101.com 上测试过了并对结果感到满意。
但是现在当我尝试拆分输入字符串时,如下所示:
String input = "apple \"banana\"";
String[] arr = input.split("\\s+((?<=\").*(?=\"))");
它无法进行实际的拆分。
这是预期的输出:
arr[0] == "apple", arr[1] == "banana"
我收到的输出:
arr[0] == "apple \"banana\""
我在这里缺少什么?任何指导将不胜感激。
编辑:@WiktorStribiżew 在评论中给出了答案。
非常感谢所有帮助过的人,尤其是@WiktorStribiżew
干杯!

最佳答案

您应该匹配这些字符串,这是一个可能的解决方案:

String input = "apple \"banana\"";
Pattern p = Pattern.compile("\"([^\"]*)\"|\\S+");
Matcher m = p.matcher(input);
List<String> results = new ArrayList<>(); // Declare a list
while (m.find()) {
if (m.group(1) != null) {
results.add(m.group(1)); // Add Group 1 to the list
} else {
results.add(m.group()); // Add the whole match value to the list
}
}
System.out.println(results); // Prints the resulting list
注意 : 如果您打算匹配第一个匹配的 " 之间的所有字符直到最后 " ,您可以使用 Pattern p = Pattern.compile("\"(.*)\"|\\S+"); .
Java demo online .
输出:
apple
banana
"([^"]*)"|\S+图案 matches :
  • " - 一个 "字符
  • ([^"]*) - 第 1 组:除 " 之外的任何 0 个或更多字符
  • " - 一个 "字符
  • | - 或
  • \S+ - 1+ 个非空白字符。
  • 关于java - 正则表达式拆分除指定子字符串以外的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62677132/

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