我正在遇到一些麻煩,「挑選」這些數據「分開」。 Altough幫助函數等是的一個選項,我真的很想解決這個問題,只使用正則表達式(匹配後處理matchgroups)。正則表達式匹配(貪婪/不真實?)
這是(部分)我有數據:
Belgium
Belgium M_Foo
Belgium A_Bar
Belgium M_FooBar
Belgium S_Whooptee Doo
Belgium Xxx
Belgium S_Foo Bar
United Kingdom
United Kingdom W_Foo-Bar
United Kingdom M_Yay
United Kingdom Xxx
United Kingdom S_Derp
United Kingdom F_Doh Lorem
United Kingdom S_Ipsum Dolor
United States of America L_Foo
Macedonia F.Y.R. Xxx
Macedonia F.Y.R. S_Foo Bar
Cyprus (Greek) M_Foo
Congo (Democratic Republic of)
Congo (Democratic Republic of) Q_Yolo
本質上這是一個「鍵/值」排序字符串數組的。它包含一個國家/地區名稱(未歸一化,因此我不能使用硬編碼的國家/地區名稱或「查找」,它可能是其他字符串,而不是國家/地區名稱),並且optionally
後跟關鍵字Xxx
或<random_upcase_char>_<random_text>
。
我想出了下面的正則表達式:
^(.+?)(?:\s+(Xxx|[A-Z]_.*)?)
,或者在第一matchgroup的小分歧:
^(.*?)(?:\s+(Xxx|[A-Z]_.*)?)
這工作正常啓動與Belgium
第一個字符串。它返回,對於這些記錄,結果如下:
Group 1 Group 2
================================
Belgium
Belgium M_Foo
Belgium A_Bar
Belgium M_FooBar
Belgium S_Whooptee Doo
Belgium Xxx
Belgium S_Foo Bar
但是,下面的線造成麻煩:
Group 1 Group 2
================================
United
United
United
United
United
United
United
United
Macedonia
Macedonia
Cyprus
Congo
Congo
我想什麼正則表達式做的是以下幾點:
Group 1 Group 2
================================================
United Kingdom
United Kingdom W_Foo-Bar
United Kingdom M_Yay
United Kingdom Xxx
United Kingdom S_Derp
United Kingdom F_Doh Lorem
United Kingdom S_Ipsum Dolor
United States of America L_Foo
Macedonia F.Y.R. Xxx
Macedonia F.Y.R. S_Foo Bar
Cyprus (Greek) M_Foo
Congo (Democratic Republic of)
Congo (Democratic Republic of) Q_Yolo
但我不能得到第一部分匹配。我很確定它與第一個匹配組的greedy/ungreedy選項有關,但在經過一段時間的擺弄之後,我無法完成它的工作......
我不在乎額外/其他/更多的匹配組被返回。正則表達式旨在用於.Net C#
應用程序中(如果您想知道這是哪種「方言」)。
任何幫助將非常感激。
http://regex101.com/r/aB8dH8似乎並不匹配'Belgium','剛果(民主共和國)'和'美國Kingdom'雖然。 – h2ooooooo
@ h2ooooooo:我想這與'.Net'正則表達式語法中的細微變化有關嗎?看起來(初看)在RAD軟件公司的正則表達式設計器中工作**幾乎** ......然而,「比利時Xxx」和其他「... Xxx」未通過測試......我試圖看看我是否可以修復它... – RobIII
編輯;如果沒有更多的數據,它沒有考慮在州名之後不存在的空間。 –