Java正则表达式:拆分逗号分隔值但忽略引号中的逗号
我的文字如下:
"text","1","more, more text","3"
任何人都可以告诉我我必须使用什么正则表达式来获得以下内容:
text 1 more, more text 3
我在这里阅读Sun教程,直到“匹配器类的方法”,但我仍然不知所措。 谢谢!
如果它像text,1,more
它会很容易,但不幸的是它不是那样的。 有任何想法吗?
您可以像这样直接使用split()方法:
String text = "\"text\",\"1\",\"more, more text\",\"3\""; String[] split = text.split("\"(,\")?"); for (String string : split) { System.out.println(string); }
(请注意,这将返回长度为5的数组,第一个位置为空字符串)
或者,如果你想使用Pattern / Matcher,你可以这样做:
Pattern pattern = Pattern.compile("\"([^\"]+)\""); Matcher matcher = pattern.matcher(text); while(matcher.find()){ System.out.println(matcher.group(1)); }
试试这个模式: "(.+?)"
它将匹配双引号之间的1个或多个字符。 引号之间的文本部分可用作matcher.group(1)
。
查看Pattern
类的javadoc以了解更多信息。 另外,请查看matcher.find()
方法。
你可以尝试这个[^\"]+(?
你可以得到每个以"
和另一个完成"
开头的部分,然后对每个部分的第一个和最后一个字符进行子串。
"[^"]*"
好像是! 在java字符串中,您可以使用
"\"[^\"]*\""
您可以在这里在线测试: http : //www.regexplanet.com/simple/index.html
你可以试试这样的东西。 我知道,这不是很好的解决方案,但它可以帮助你:)
string[] s=text.split("\",\""); s[0]=s[0].substring(1); s[s.length-1]=s[s.length-1].substring(0,s[s.length-1].length);