正则表达式用于在不将单引号或双引号引起来时使用空格分割字符串

卡尔

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

输入示例:

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.

请注意"will be"'regular expression'保留单词之间的空格。

Jan Goyvaerts:

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

[^\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());
} 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用正则表达式替换用双引号引起来的字符串?

仅当所有字符串都用引号引起来时才进行正则表达式拆分

java-正则表达式使用空格分割字符串,但不考虑双引号或单引号

C#正则表达式提取用单引号引起来的字符串

在Perl兼容的正则表达式中检测带有双引号和反斜杠转义的双引号引起来的字符串

字符串的正则表达式,可选地用引号引起来

如何使用正则表达式匹配单引号或双引号中的字符串

从字符串中删除所有未用单引号或双引号引起来的空格

在python正则表达式中找到所有用双引号引起来的满足服务器约束的子字符串

正则表达式匹配字符串,直到出现字符为止,除非用引号引起来

正则表达式按空格分割,但忽略双引号字符串

正则表达式不匹配字符串中的双引号(仅单引号)

正则表达式提取单引号或双引号之外的字符串

正则表达式,用于分割由|分隔的字符串 不加双引号时

正则表达式,将每个CSV字段都用双引号引起来

Python正则表达式匹配模式不被双引号引起来

正则表达式-将所有整数都用双引号引起来

正则表达式以匹配可选用双引号引起来的值

红宝石的正则表达式在单词之前用双引号引起来

C#使用正则表达式解析包含双引号和单引号的字符串

选择所有用引号引起来的空格的正则表达式?

php:字符串被双引号引起来,而不是单引号引起来。怎么修?

用于检测未用双引号括起来的单词和字符串的正则表达式

使用正则表达式捕获不带引号的双引号内的字符串

如何使用正则表达式分隔双引号字符串和非双引号字符串?

正则表达式拆分逗号分隔符值,用双引号引起来

在grep中将双引号引起来的正则表达式与按原样提供reg-ex之间的区别

用于替换双引号字符串中双引号的不同组合的正则表达式

用于匹配单引号字符串的正则表达式在PHP中失败