2010-01-27 63 views
2

我想將兩個.net正則表達式合併爲一個。以下表達式驗證excel類似單元格的名稱。組合.net正則表達式

Regex.IsMatch(name, @"^[A-Za-z]{1}[\w\.]*$") && 
    !Regex.IsMatch(name, @"^[A-Za-z]{1,2}\d+$"); 

第一部分確保單元名稱以字符開頭並且可以是任意長度。第二個確保單元名稱不是單元格引用;例如,A1,AA1,AA11等

+0

'[\ w。] *'匹配可能是點,字母,下劃線,*或數字*的字符串。請提供您想要匹配的例子。 – 2010-01-27 14:41:10

+0

備註:Excel單元格名稱最多可以有三個字符。 – Joey 2010-01-27 14:47:15

回答

1

以下可能的工作:

^[A-Za-z](?![A-Za-z]?\d+$)[\w.]*$ 

由於第一正則表達式必須匹配和第二絕不能,我移動第二個的一部分結合到一個negative lookahead其中不會消耗匹配中的任何字符,但仍然會使RE拒絕匹配第二個RE的字符串。

+0

感謝Johannes,這個解決方案讓我獲得了最大的成功。但是,AA11Test是一個有效的「命名單元」,並且此RE失敗。 這似乎捕獲所有實例: ^ [A-Za-z](?![A-Za-z] {0,2} \ d + $)[\ w。] * $ – Greg 2010-01-27 18:34:57

+0

Eek,是的,忘記了一個主播。抱歉。 – Joey 2010-01-27 23:47:14

1

我相信你可以消除第二個電話IsMatch,它不應該有所作爲。

Regex.IsMatch(name, @"^[A-Za-z]{1}[\w.]*$") 

itsslef中的此模式確保字符串中不存在數字(0 - 9),所以它應該足夠。

+0

雖然第二個RE不能匹配,所以將兩個RE都合併爲一個並不是一個簡單的問題。 – Joey 2010-01-27 14:26:49

+1

@Johannes:如果第一個匹配,第二個*不能匹配。 – Noldorin 2010-01-27 14:27:14

+0

'\ w'包含'0-9'。事實上,''AA1''已經是一個簡單的反例,由OP給出。 – Joey 2010-01-27 14:40:49