gpt4 book ai didi

java - 正则表达式用于在没有被单引号或双引号包围时使用空格分割字符串

转载 作者:IT老高 更新时间:2023-10-28 11:23:34 24 4
gpt4 key购买 nike

我是正则表达式的新手,非常感谢您的帮助。我正在尝试组合一个表达式,该表达式将使用所有未被单引号或双引号包围的空格来拆分示例字符串。我的最后一次尝试看起来像这样: (?!") 并且不太有效。它在引号之前的空间上 split 。

示例输入:

This is a string that "will be" highlighted when your 'regular expression' matches something.

期望的输出:

This
is
a
string
that
will be
highlighted
when
your
regular expression
matches
something.

注意“将是”'正则表达式'保留单词之间的空格。

最佳答案

我不明白为什么所有其他人都提出如此复杂的正则表达式或如此长的代码。本质上,您想从字符串中获取两种内容:不是空格或引号的字符序列,以及以引号开头和结尾的字符序列,两者之间没有引号,用于两种引号。您可以使用这个正则表达式轻松匹配这些内容:

[^\s"']+|"([^"]*)"|'([^']*)'

我添加了捕获组,因为您不希望列表中出现引号。

此 Java 代码构建列表,如果匹配则添加捕获组以排除引号,如果捕获组不匹配(匹配未引用的单词),则添加整体正则表达式匹配。

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
if (regexMatcher.group(1) != null) {
// Add double-quoted string without the quotes
matchList.add(regexMatcher.group(1));
} else if (regexMatcher.group(2) != null) {
// Add single-quoted string without the quotes
matchList.add(regexMatcher.group(2));
} else {
// Add unquoted word
matchList.add(regexMatcher.group());
}
}

如果您不介意返回列表中包含引号,则可以使用更简单的代码:

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}

关于java - 正则表达式用于在没有被单引号或双引号包围时使用空格分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/366202/

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