我需要一个与以下内容匹配的正则表达式:
'"test foo bar", "test"' => no match
'"test, foo bar", "test"' => "test, foo bar"
'"test, foo bar"' => "test, foo bar"
'"test foo bar"' => no match
'"test", "test, foo"' => "test, foo"
'"test", ","' => no match
'"test", 0, 0, "foo"' => no match
正则表达式应匹配任何包含逗号
的字符串我从\".+?\"
开始,但它会选择直到下一个字符串,这对我来说不适用。
修改:谢谢,我在你的所有帮助中找到了它\"[\w]+?,.+?\"
答案 0 :(得分:2)
你绝对必须在一个正则表达式中这样做吗?我会用一个正则表达式将字符串拆分成它的组成部分,然后迭代它们以找到带逗号的第一个字符串。
我的笔记本电脑上还没有Java,所以我无法检查代码进行拆分,但我希望正则表达式是这样的:
("[^"]*")(?:, ("[^"]*"))*
Java正则表达式引擎可能不会让你获得同一个捕获组的多个匹配项,但是...我很确定你可以在.NET中轻松使用它,但它可能会稍微复杂一些在Java中。您可能需要以下内容:
(?:^|, )("[^"]*")
在实际字符串开始之前使用“行的开头或逗号后跟空格”。
所有这些仍然只是试图将文本拆分成它的位 - 它不是试图找到包含逗号的第一个字符串......但它可能是这样做的起点。不幸的是,在那一点上我的正则表达式用完了 - 我仍然按照“拆分然后迭代”的方式进行:)
答案 1 :(得分:1)
你试过了吗?
"[^"]?,[^"]+?"
这将匹配,“,任何字符不是”一次或多次,直到逗号,逗号,任何字符不是“一次或多次直到”,以及“
答案 2 :(得分:1)
"[^,"]+?,[^"]+?"
答案 3 :(得分:1)
试试这个:\"[^\"]*,[^\"]*\"
。
答案 4 :(得分:0)
我在你的所有帮助\"[\w]+?,.+?\"