2013-01-23 15 views
0

給定的輸入,如以下(其中,可以有任何數量的逗號分隔值的;在本例中只有3)捕獲這些元素的最佳正則表達式是什麼?

Abc (xyz) asd 123 - 1 MMM, xcz8c.8x - 5 MMMs, hello - world - 1 MMM 

什麼是正則表達式,將捕獲的以下3個要素:

Abc (xyz) asd 123 
    xcz8c.8x 
    hello - world 
+0

[你有什麼試過](http://whathaveyoutried.com/)? –

回答

1

在蟒蛇:

>>> import re 
>>> s = 'Abc (xyz) asd 123 - 1 MMM, xcz8c.8x - 5 MMMs, hello - world - 1 MMM' 
>>> re.findall(r'[ |,]*(.*?) - \d+ MMMs?', s) 
['Abc (xyz) asd 123', 'xcz8c.8x', 'hello - world'] 
+0

你的正則表達式可以做到這一點。你能解釋一下爲什麼。*?解決問題? –

+0

(。*?)是懶惰的 - 意味着它會嘗試0個字符,然後是1個字符,然後是2等等,直到剩下的正則表達式匹配。 (。*)是貪婪的,這意味着它會嘗試MAX個字符,然後是MAX-1個字符,然後是MAX-2等等,直到剩下的正則表達式匹配。 – Patashu

1
([^,]*?)\s-\s\d+\sMMMs? 

這可能不是是最好的,但我已經測試了它here

+0

我需要更多地熟悉*嗎?量詞。謝謝。 –

+0

@JohnSmith這被稱爲[勉強量詞](http://docs.oracle.com/javase/tutorial/essential/regex/quant.html)。如果你不把'?'放在那裏,它會匹配整個輸入。 –