当前位置: 首页 > 知识库问答 >
问题:

仅当所有字符串都被引用时用于拆分的正则表达式

何兴邦
2023-03-14

是否有一种方法返回分隔符,只有当所有字符串被引用使用正则表达式?

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

使用(?)?

但在不应检测到任何-时,正则表达式与以下示例中的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\-”]*”$匹配,我将应用拆分为(?)?


共有2个答案

许俊风
2023-03-14

我只想使用String#匹配和以下模式:

"[^"]+"(?:-"[^"]+")*

脚本:

String input = "\"abc\"-\"123\"-\"zxc\"";
if (input.matches("\"[^\"]+\"(?:-\"[^\"]+\")*")) {
    System.out.println("MATCH");  // prints MATCH
}

String input = "abc\"-\"123\"-\"zxc\"";  // missing leading quote
if (input.matches("\"[^\"]+\"(?:-\"[^\"]+\")*")) {
    System.out.println("MATCH");  // does not print
}
常俊侠
2023-03-14

如果要返回分隔符周围的值,可以将捕获组与\G锚点结合使用。

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

解释

  • \G在上一个匹配的末尾或字符串的开头断言位置
  • (“[^”]*”从双引号匹配到双引号
  • (?=(?:-“[^”]*”*$)断言-”的可选部分。。“位于右侧,直到字符串结束
  • (?:-|$)匹配-或字符串结尾

查看Regex演示或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"
 类似资料:
  • 我有一个表格形式的命令输出。我正在解析结果文件的输出并将其存储在字符串中。一行中的每个元素由一个或多个空格字符分隔,因此我使用正则表达式匹配1个或多个空格并拆分它。但是,在每个元素之间插入一个空格: 还有更好的方法吗? 每次拆分后,str2都会附加到列表中。

  • 问题内容: 我有一个字符串,需要根据出现的“,”(逗号)进行拆分,但是需要忽略在一对括号内出现的任何字符串。例如, 应拆分为 问题答案: 对于非嵌套 嵌套 (括号内的括号)

  • 问题内容: 我是正则表达式的新手,非常感谢您的帮助。我正在尝试将一个表达式合并在一起,以使用不被单引号或双引号引起来的所有空格拆分示例字符串。我的最后一次尝试看起来像这样:(?!”)并且效果不佳。它在报价前的空格处分开。 输入示例: 所需的输出: 注意并保留单词之间的空格。 问题答案: 我不明白为什么其他所有人都提出如此复杂的正则表达式或如此长的代码。本质上,你想从字符串中获取两种东西:不是空格或

  • 问题内容: 我是regex的新手,我想做的是在特定条件下拆分String,但我不知道该怎么做。 这是样品/条件 我希望字符串被拆分,,,,,, 这可能吗? 问题答案: 如果 确实 需要使用正则表达式,则可能应该使用环顾四周机制,因为您不想 在 此字符 之前 或 之后 进行拆分。 输出:

  • 上下文:我需要拆分太长的字符串,这些字符串用作html表中的列标题。这些字符串是变量名,因此它们中没有空格。 如果让css属性执行此操作,则字符串将在固定位置拆分,而不是使用字符串中的点或。 例如,假设我有以下字符串: 使用点作为分隔符,我可以用很多很多不同的方法来分割它。但我提出了以下指导原则: 所有子串必须为12个字符或更少 分隔符[。_]应该在子字符串的末尾,而不是开头 子串的数量必须最小

  • 问题内容: 我有日期主要集中在形式和。我想模式匹配。 为此目的编写正则表达式很简单吗?我是regex的新手,所以不胜感激任何资源达标可以使我快速入门吗? 问题答案: 如果您试图在字符串中查找这些日期符号,那么正则表达式确实是一个不错的选择。您可以使用此正则表达式: 在此处查看实际操作:http : //rubular.com/r/qZOTsUikbo。注意:这也匹配“ 日期 ” 。如果这对您来说是