2009-10-29 51 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

相關問題