2009-10-29 80 views
1

我需要它匹配下面的正则表达式:用逗号(正则表达式)选择字符串

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

+1

只要是明确的 - 做你的意思是一个逗号作为小数点?许多SO用户期望您指的是一个句点(。)而不是逗号(,) - 可能需要编辑该问题才能明确表示。 – 2009-10-29 07:08:52

+0

我同意jon。对我来说小数点是'。'不是','而且据我所知,很多人也会这么想。 – NawaMan 2009-10-29 07:11:34

+0

我改正了,以commma。谢谢 – codevour 2009-10-29 07:14:00

回答

0

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

1

你试过:

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

,将匹配的“任何字符不是”一次或多次,直到一个逗号,逗号,任何字符不是“一次或多次,直到”和“

+0

对不起,也许还不清楚,如果这是我的字符串:'test,foo','test','bar'' - >'test,foo',我想要。 – codevour 2009-10-29 07:16:13

1

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

+0

这是近乎完美的,但它匹配“,”,我如何防止这种情况? – codevour 2009-10-29 07:20:26

+0

@chrsk将*号改为+。 – 2009-10-29 07:26:34

2

你绝对必须在一个正则表达式中做到这一点吗?我将使用一个正则表达式将字符串拆分为其组成部分,然后只是遍历这些字符串以查找第一个用逗号。

我没有Java的这台笔记本电脑,所以我不能检查代码做分割,但是我希望在正则表达式是这样的:

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

这是可能的Java正则表达式引擎不会让你获得同一个捕获组的多个匹配,但是......我敢肯定你可以很容易地在.NET中使用它,但是在Java中它可能稍微有点棘手。您可能需要这样的东西:

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

消费“一条线的任一开始,或逗号后面加一个空格”的实际字符串开始前。

所有这一切都是仍然只是试图将文本分成它的位 - 它不是试图找到第一个包含逗号的字符串......但它可能是这样做的起点。不幸的是,在这一点上我的正则表达式福用完了 - 我仍然这样做“分离,然后循环”的方式:)

+0

嘿,谢谢你的帮助,你对编程的方式来说是正确的,但我只想做一个IDE查找语句,它很容易和快速重用,在那里我可以单独做一些改变 – codevour 2009-10-29 07:35:06

相关问题