2016-03-27 48 views
3

我希望將字符串中的所有內容都匹配到最後一個空格,但不包括它。例如起見,我想在大膽符合我把人物:正則表達式:將所有內容匹配到最後一個空格,但不包括它

RENATA T. GROCHAL

到目前爲止,我有^(.+\s)(.+)然而,最後的空格可以匹配,我不希望它。 RegEx也適用於除英語以外的其他語言,就像我的一樣。

編輯:我沒有提到的第二個捕獲組不應該包含空間 - 它應該是GROCHALGROCHAL它面前的空間。

編輯2:我的新正則表達式的基礎上,兩個答案都提供的是:^((.+)(?=\s))\s(.+)和正則表達式用來替換匹配是\3, \1。它的預期結果如下:

GROCHAL, RENATa T. 

任何改進都是可取的。

+1

如何匹配'\ S +'非空格前'$'結束:(+)'\ s(\ S +)$'](HTTPS ://regex101.com/r/kS5pF8/1),並用'$ 2,$ 1'替換爲類似@ medvedev1088解決方案,使用兩個組'^(。+)\ s(。+)' –

+0

@bobblebubble對我來說,您的解決方案是比我的好多了。 – menteith

+1

我投了贊成medvedev1088的解決方案,因爲我的想法非常相似。 –

回答

3

^(.+)\s(.+)

與替換字符串:

\2, \1

更新:

另一個版本,可以摺疊2個捕獲組之間多餘的空格:

^(.+?)\s+(\S+)$

+2

我寧願解釋他爲什麼要嘗試它,爲什麼它可以解決他的問題。 –

2

用積極的預測先行斷言:

^(.+)(?=\s) 

捕獲組1將包含比賽。

0

我喜歡使用命名的捕獲組:

rawName = RENATA T. GROCHAL 
RegexMatch(rawName, "O)^(?P<firstName>.+)\s(?P<lastName>.+)", match) 
MsgBox, % match.lastName ", " match.firstName 
相關問題