有沒有辦法按發生順序匹配唯一的字符組(在下面的情況下是字),純粹是在正則表達式中?如果是這樣,那麼表達式與非正則表達式解決方案的效率如何比較?我正在使用Python的風格,但我也會對其他任何風格的解決方案感興趣。在保持順序的情況下匹配唯一的組
這裏是一個樣本案例:
string = 'the floodwaters are rising along the coast'
unique = ['the', 'floadwaters', 'are', 'rising', 'along', 'coast']
在Python的正則表達式的混合解決方案,我可以配合我想要的組,並用一個列表理解,以便移除重複,同時維持秩序。
groups = re.findall('[a-zA-Z]+', string)
unique = [g for i, g in enumerate(groups) if g not in groups[:i]]
該網站還有類似的問題,比如one that addresses matching unique words。但是,從接受的答案中得出的表達式與給定組最遠的發生次數相匹配,而我想要匹配發生的第一次事件。下面是一個表達:
(\w+\b)(?!.*\1\b)
正則表達式庫有所不同。在Python中,您可以使用PyPi'regex'庫,並使用['\ b(\ w +)\ b(?<!(?:。* \ b \ 1 \ b){2})'](http:/ /regexstorm.net/tester?p=%5cb%28%5cw%2b%29%5cb%28%3f%3c!%28%3f%3a.*%5cb%5c1%5cb%29%7b2%7d%29&i =在+洪水+爲+沿着上升+ + +的海岸)。而在.NET中,你也可以使用它。 –
通常,以C++中的_unique_爲例,順序不會被保留。這是因爲該列表必須先排序。 – sln
並且'(\ w + \ b)(?!。* \ 1 \ b)'與他們第一次出現時的單詞不匹配。它最終會匹配dups,而不是開始。你最好的選擇是分裂以獲得所有的單詞,然後做你自己的保護。正則表達式這將是難以置信slowww ........ – sln