用逗号选择字符串(正则表达式)

时间:2009-10-29 07:05:35

标签: java regex string groovy

我需要一个与以下内容匹配的正则表达式:

'"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]+?,.+?\"

5 个答案:

答案 0 :(得分:2)

你绝对必须在一个正则表达式中这样做吗?我会用一个正则表达式将字符串拆分成它的组成部分,然后迭代它们以找到带逗号的第一个字符串。

我的笔记本电脑上还没有Java,所以我无法检查代码进行拆分,但我希望正则表达式是这样的:

("[^"]*")(?:, ("[^"]*"))*

Java正则表达式引擎可能不会让你获得同一个捕获组的多个匹配项,但是...我很确定你可以在.NET中轻松使用它,但它可能会稍微复杂一些在Java中。您可能需要以下内容:

(?:^|, )("[^"]*")

在实际字符串开始之前使用“行的开头或逗号后跟空格”。

所有这些仍然只是试图将文本拆分成它的位 - 它不是试图找到包含逗号的第一个字符串......但它可能是这样做的起点。不幸的是,在那一点上我的正则表达式用完了 - 我仍然按照“拆分然后迭代”的方式进行:)

答案 1 :(得分:1)

你试过了吗?

"[^"]?,[^"]+?"

这将匹配,“,任何字符不是”一次或多次,直到逗号,逗号,任何字符不是“一次或多次直到”,以及“

答案 2 :(得分:1)

"[^,"]+?,[^"]+?"

答案 3 :(得分:1)

试试这个:\"[^\"]*,[^\"]*\"

答案 4 :(得分:0)

我在你的所有帮助\"[\w]+?,.+?\"

中找到了答案