我需要基于逗号分割一个字符串作为分隔符,但是如果字符串的一部分用 " 括起来,则分割必须停止从 " 的开始到它的结尾,即使它之间包含逗号。
任何人都可以帮助我使用正则表达式环顾四周来解决这个问题。
复活这个问题,因为它有一个没有提到的简单正则表达式解决方案。这种情况听起来非常类似于 ["regex-match a pattern unless..."][4]
\"[^\"]*\"|(,)
交替的左侧匹配完整的双引号字符串。我们将忽略这些匹配。右侧匹配并捕获第 1 组的逗号,我们知道它们是正确的,因为它们与左侧的表达式不匹配。
这是工作代码(参见在线演示):
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
参考
请试试这个:
(?<!\G\s*"[^"]*),
如果你把这个正则表达式放在你的程序中,它应该是:
String regex = "(?<!\\G\\s*\"[^\"]*),";
但是有两点不清楚:
是在"
附近唯一开始,
,还是可以在内容中间开始,例如AAA, BB"CC,DD"
? 上面的正则表达式只处理start neer ,
.
如果内容有"
自己,如何逃逸?使用""
或\"
?上面的正则表达式不处理任何转义"
格式。