2011-02-28 71 views
1

我想匹配名稱模式。一個名字可以是基本的正則表達式幫助

姓氏,名字middleinitial

姓氏,名字

我試圖創建一個正則表達式來檢查的最後2個字符的字符串是[空格] [anychar]

我發現了一個在線教程它說來匹配字符串的結尾你做

A$ 

"A" at the end of a line 

在將其應用到我的我試圖做這樣的事情,和許多的這種形式了。我從字面上不知道雖然:/

([\\s][A-Za-z]$) 

回答

4

您可以輕鬆地檢查最後兩個字符而不使用正則表達式。

bool hasMiddleInitial = false; 
if (name.Length > 1 && 
    name[name.Length-2] == ' ' && 
    char.IsLetter(name, name.Length-1)) 
{ 
    hasMiddleInitial = true; 
} 

這是更清晰(更可讀),也比正則表達式執行速度更快。它使你不必擔心非英文字母(A-Z是一個非常有限的集合!)。

(PS你也可以使用char.IsWhiteSpace,而不是直接比較' ';然後,將與其他空格字符工作過。例如,亞洲用戶有可能進入一個U + 3000表意空間,而不是標準的U + 0020空間)。

+0

正確回答不是因爲你給的代碼,而是因爲我放棄了試圖做到沒有正則表達式因爲我沒有沒有正確的庫函數。 char.isLetter - 永遠不會知道:D。謝謝 – rik 2011-02-28 11:34:38

0

您發佈的正則表達式匹配任何兩個字符的字符串,有一個空格和一個字母。

含義:

一個

我不知道你究竟想匹配,所以很難在它應該是什麼評論,我可以建議你可以嘗試一個正則表達式開發工具,讓你的生活變得更輕鬆。

http://www.ultrapico.com/Expresso.htm

是一個我使用(因爲它是免費的),但有一噸在那裏。

+0

模擬匹配給定字符串的最後2個字符,[空格] [任意字符從a-z] – rik 2011-02-28 11:24:36

1

溝渠括號,並像這樣做:\s[A-Za-z]$

\s代表「任何空格字符」,[A-Za-z]代表「該子集中的任何字符:A-Za-z。」AZ「類似於」A到Z diapason「的關鍵字,但通常使用括號說類似「這些符號」。例如,模式[so]將匹配任何英文字母或者是小號Ø

你也可以做反向通過開後加入^符號所以模式匹配的任何字符不是出現在括號中。所以[^so]將匹配a,b,和所有其他符號,但不會匹配so

編輯:如果你想匹配一個初始的,「A-Z」可能不是最好的主意。使用unicode \p{L}屬性。

+0

我有多接近我可以告訴我將來的參考括號是做什麼的?謝謝 – rik 2011-02-28 11:29:01

+0

如果中間的初始值是?或者?這個解決方案非常麻煩。 – Timwi 2011-02-28 11:30:07

+0

即時通訊不知道數據庫會允許該字符集嗎?如果這有什麼區別,字段類型是varchar2(1字節)? – rik 2011-02-28 11:31:30

0

/\s[A-Za-z]$/ 

相當於「來自該組A-Z或A-Z嚴絲合縫一個斷裂的空間和一個字符在字符串($)」的端部。

爲了測試lastname,firstname middlenamelastname,firstname你會使用量詞說「有多少應該怎樣匹配」:(。)

/^.+,.+\s?.*$/ 

這相當於「從字符串(^),匹配任何字符的開始,一個或多個(+)後面緊跟一個逗號,後跟任意一個或多個字符,後跟零個或一個(?)空格,後跟任意字符零次或多次(*)結束字符串($)' 。

以此爲起點,構建任何所需的複雜性。

+0

一個markdown評論會很好... – dianovich 2011-02-28 11:44:40

0

這些正則表達式應該可以做到。 \w+,\w+(?:\s\w+)?