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

只有在使用正则表达式对所有字符串都加引号的情况下,才有办法返回分隔符的分隔符吗?

考虑到字符串应以“-”分隔。

使用((?<=")-(?="))它与2匹配,-以下示例可以"abc"-"123"-"zxc"

但是-当不应该检测到正则表达式匹配以下样本中的2-

abc"-"123"-"zxc"

"abc"-"123"-"zxc

使用-(?=([^"]*"[^"]*")*[^"]*$)它可以匹配2,-并且可以使用以下示例:"abc"-"123"-"zxc"

-与以下示例中的任何一个都不匹配,也可以:

"abc"-"123"-"zxc

"abc"-"123"-zxc"

但是-当不应该检测到正则表达式匹配以下样本中的2-

abc"-"123"-"zxc"

abc-"123"-"zxc"

"abc"-"123"-zxc

我当时正在考虑使用2个正则表达式,如果字符串匹配,^"[\da-z\-"]*"$我将使用split,((?<=")-(?="))但是我觉得我还没有尝试过一种方法。

第四只鸟

如果要返回定界符周围的值,则可以结合使用捕获组和\G锚点。

\G("[^"]*")(?=(?:-"[^"]*")*$)(?:-|$)

说明

  • \G 在上一个比赛的末尾或字符串的开头声明位置
  • ("[^"]*") 从双引号匹配到双引号
  • (?=(?:-"[^"]*")*$)断言-".."右边的可选部分,直到字符串结尾
  • (?:-|$)匹配-或字符串末尾

观看正则表达式演示Java演示

在Java中,反斜杠加倍:

String regex = "\\G(\"[^\"]*\")(?=(?:-\"[^\"]*\")*$)(?:-|$)";

例如

String strings[] = {
    "\"abc\"-\"123\"-\"zxc1\"",
    "\"abc\"-\"123\"-\"zxc2",
    "\"abc\"-\"123\"-zxc3\"",
    "abc\"-\"123\"-\"zxc4\"",
    "\"abc\"-\"123\"-\"zxc5",
    "abc\"-\"123\"-\"zxc6\"",
    "abc-\"123\"-\"zxc7\"",
    "\"abc\"-\"123\"-zxc8"
};
String regex = "\\G(\"[^\"]*\")(?=(?:-\"[^\"]*\")*$)(?:-|$)";
Pattern pattern = Pattern.compile(regex);
for (String s : strings) {
    Matcher matcher = pattern.matcher(s);

    while (matcher.find()) {
        for (int i = 1; i <= matcher.groupCount(); i++) {
            System.out.println(matcher.group(i));
        }
    }
}

输出量

"abc"
"123"
"zxc1"

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

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

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

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

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

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

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

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

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

Javascript匹配所有正则表达式,返回所有用双引号引起来的所有短语的数组

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

是否有一个正则表达式将忽略引号引起来的单词

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

PL / SQL正则表达式匹配逗号,不能用引号引起来

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

用引号引起来:查找并替换为正则表达式

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

使用正则表达式将所有JSON整数值都用双引号“”括起来

CsvHelper将所有值都用引号引起来

Python:用空格分隔的字符串的每个词都用引号引起来

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

正则表达式查找带引号的字符串中的所有大括号

sed:仅在用引号引起来时替换文本中的字符串

强制将正则表达式用两端的引号引起来或完全不引起引号,而无需复制表达式

一个正则表达式,以匹配一个不被引号引起来的逗号

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

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

在python中加入字符串列表,并将每个字符串都用引号引起来