給定的輸入,如以下(其中,可以有任何數量的逗號分隔值的;在本例中只有3)捕獲這些元素的最佳正則表達式是什麼?
Abc (xyz) asd 123 - 1 MMM, xcz8c.8x - 5 MMMs, hello - world - 1 MMM
什麼是正則表達式,將捕獲的以下3個要素:
Abc (xyz) asd 123
xcz8c.8x
hello - world
給定的輸入,如以下(其中,可以有任何數量的逗號分隔值的;在本例中只有3)捕獲這些元素的最佳正則表達式是什麼?
Abc (xyz) asd 123 - 1 MMM, xcz8c.8x - 5 MMMs, hello - world - 1 MMM
什麼是正則表達式,將捕獲的以下3個要素:
Abc (xyz) asd 123
xcz8c.8x
hello - world
在蟒蛇:
>>> 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個字符,然後是1個字符,然後是2等等,直到剩下的正則表達式匹配。 (。*)是貪婪的,這意味着它會嘗試MAX個字符,然後是MAX-1個字符,然後是MAX-2等等,直到剩下的正則表達式匹配。 – Patashu
([^,]*?)\s-\s\d+\sMMMs?
這可能不是是最好的,但我已經測試了它here。
我需要更多地熟悉*嗎?量詞。謝謝。 –
@JohnSmith這被稱爲[勉強量詞](http://docs.oracle.com/javase/tutorial/essential/regex/quant.html)。如果你不把'?'放在那裏,它會匹配整個輸入。 –
[你有什麼試過](http://whathaveyoutried.com/)? –