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

正则表达式:按逗号拆分,但不包括括号和引号内的逗号(均为单引号)

隆睿
2023-03-14

我有一根绳子

5,(5,5),C'A,B','A,B',',B','A,',"A,B",C"A,B" 

我想用逗号分隔,但需要排除括号和引号内的逗号(单引号和双引号)。

这样地

5(5,5)C'A,B' C'A,B'

使用java正则表达式如何实现这一点??


共有3个答案

鲁景山
2023-03-14

考虑匹配,而不是拆分字符串。

String s  = "5,(5,5),C'A,B','A,B',',B','A,',\"A,B\",C\"A,B\"";
Pattern p = Pattern.compile("(?:[^,]*(['\"])[^'\"]*\\1|\\([^)]*\\))|[^,]+");
Matcher m = p.matcher(s);
while (m.find()) {
  System.out.println(m.group());
}

输出

5
(5,5)
C'A,B'
'A,B'
',B'
'A,'
"A,B" 
C"A,B"
危彬彬
2023-03-14
,(?![^(]*\))(?![^"']*["'](?:[^"']*["'][^"']*["'])*[^"']*$)

试试这个。

见演示。

对于java

,(?![^(]*\\))(?![^"']*["'](?:[^"']*["'][^"']*["'])*[^"']*$)
侯沈义
2023-03-14

你可以使用这个正则表达式:

String input = "5,(5,5),C'A,B','A,B',',B','A,',\"A,B\",C\"A,B\"";
String[] toks = input.split( 
                ",(?=(([^']*'){2})*[^']*$)(?=(([^\"]*\"){2})*[^\"]*$)(?![^()]*\\))" );
for (String tok: toks)
    System.out.printf("<%s>%n", tok);

输出:

<5>
<(5,5)>
<C'A,B'>
<'A,B'>
<',B'>
<'A,'>
<"A,B">
<C"A,B">

说明:

,                         # Match literal comma
(?=(([^']*'){2})*[^']*$)  # Lookahead to ensure comma is followed by even number of '
(?=(([^"]*"){2})*[^"]*$)  # Lookahead to ensure comma is followed by even number of "
(?![^()]*\\))             # Negative lookahead to ensure ) is not followed by matching
                          # all non [()] characters in between
 类似资料:
  • 问题内容: 我的文字如下: 谁能告诉我我必须使用哪些正则表达式分度数才能获得以下结果: 我在这里阅读Sun教程,直到“ Matcher类的方法”为止,但我仍然茫然。谢谢! 如果是这样,那将很容易,但是不幸的是,事实并非如此。有任何想法吗? 问题答案: 您可以直接使用split()方法,如下所示: (请注意,这将返回长度为5的数组,第一个位置为空字符串) 或者,如果您想使用模式/匹配器,可以这样做:

  • 问题内容: 在我的一个项目中,我不得不处理逗号分隔文件(CSV)。我必须基于逗号来拆分数据,而忽略引号内的逗号(即),因此我使用了另一个堆栈溢出问题(Java:拆分逗号分隔的字符串但忽略了引号中的逗号)中提到的表达式。一切工作都很好,直到最近我才注意到它不适用于下面提到的一种特定情况。 我需要在逗号上拆分的数据字符串为: 以我的理解为基础 拆分后的数据应返回一个大小为10的数组,该数组的后两个索引

  • 我需要替换括号和引号外的所有逗号 仅考虑括号替换,我有以下正则表达式 我做了下面的正则表达式,在一个组中选择括号和引号内的内容,在另一个组中选择括号外的逗号,但我没有找到一种简单的方法来只替换一个组的字符串

  • 我有一个值,如下所示 如何编写一个正则表达式来捕获由逗号分隔的元素,而逗号不在双引号、方括号或花括号内?我想通过做下面的事情来匹配和获取元素;使用模式匹配。 元素应该是, 如果字符串如下所示 那么元素应该是

  • 我试图匹配,使用正则表达式,所有逗号(后跟一个空格):在任何括号或方括号之外,即逗号不应该包含在括号或方括号中。 目标字符串是。在这种情况下,它应该匹配第一个逗号和最后一个逗号(介于和之间,和)。 所以我可以拆分分成,and,不会因此而使括号/括号不平衡。 为此,似乎很难单独使用正则表达式。有没有其他办法解决这个问题? 我使用的正则表达式: 但是这个表达式将匹配另外两个不应该匹配的逗号(第二个和第

  • 我有一个字符串示例: 目标是遍历它,并将其反序列化为类对象的层次结构。 大多数其他在这里提出类似问题的例子之所以不起作用,是因为递归,向前(或向后)看偶数个括号是不起作用的。 我考虑过将其存储为JSON,但是值的对象类型会在没有通知的情况下发生变化,这在过去甚至json.net都被证明是混乱的,特别是因为类型可能都通过继承来关联。 因此,给定示例字符串,目标是在逗号“,”上拆分,但忽略括号中的所有