我需要将一个基于逗号的字符串拆分为分隔符,但是如果字符串的一部分包含“分裂必须从该部分开始停止”到它的结尾,即使它之间包含逗号。
任何人都可以帮助我使用正则表达式来解决这个问题。
答案 0 :(得分:2)
重新提出这个问题,因为它有一个没有提到的简单正则表达式解决方案。这种情况听起来非常类似于[“正则表达式匹配模式,除非......”] [4]
\"[^\"]*\"|(,)
交替的左侧匹配完整的双引号字符串。我们将忽略这些匹配。右侧匹配并捕获第1组的逗号,我们知道它们是正确的,因为它们与左侧的表达式不匹配。
以下是工作代码(请参阅online demo):
import java.util.regex.*;
import java.util.List;
class Program {
public static void main (String[] args) {
String subject = "\"Messages,Hello\",World,Hobbies,Java\",Programming\"";
Pattern regex = Pattern.compile("\"[^\"]*\"|(,)");
Matcher m = regex.matcher(subject);
StringBuffer b = new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "SplitHere");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
String[] splits = replaced.split("SplitHere");
for (String split : splits)
System.out.println(split);
} // end main
} // end Program
参考
答案 1 :(得分:0)
请试试这个:
(?<!\G\s*"[^"]*),
如果你把这个正则表达式放在你的程序中,它应该是:
String regex = "(?<!\\G\\s*\"[^\"]*),";
但有两件事情并不清楚:
"
是否仅在,
附近开始,还是可以在内容的中间开始,例如AAA, BB"CC,DD"
?上面的正则表达式只处理start neer ,
。
如果内容本身有"
,如何逃避?使用""
或\"
?上面的正则表达式不会处理任何转义"
格式。