2011-10-06 89 views
1

號範圍我期待在英國的郵政編碼,並試圖找出如何可以從數據庫(the first part of a UK postcode)獲取數據和動態使用C#爲他們創造一個正則表達式。例如:動態正則表達式使用C#

AB44-56 

我知道我想作爲輸出:

AB([4][4-9]|[5][0-6])+ 

但是,我不能工作了我如何能夠與邏輯做到這一點,也許我需要拆分來自數字的信件第一,但我不能這樣做使用拆分。

我有其他的組合太 - 單範圍:

AB31 would be AB[3][1]+ 

一些只有字母:

BT would be BT+ 

有些對於一個字母和1個或兩個數字:

G83 Would be G[8][3] 

任何建議或指導將非常樂意如何編碼。

+0

我還不確定我是否理解你要做的事情背後的邏輯。也許這是整個**根據我的規則**部分,這是拋棄我,我的特別是缺乏今天。 –

+0

假設你有一個很好的定義的輸入,它可能不太複雜的只是寫一個業務規則通過檢查字符串的組成部分,而不是動態生成的正則表達式驗證輸入。 RegEx對於輕鬆驗證輸入模式非常有用。在這種情況下你會失去這種緩解。 –

+0

你想基於你的正則表達式,你的「規則」是什麼? – gilly3

回答

0

afrom維基英國郵政編碼:

這可以被概括爲:(一個或兩個字母)( 號碼0到99之間)(零個或一個字母)(空間)(單位)(兩個字母)

所以

^[A-Z,a-z]{0,2}\d+[A-Z,a-z]?\s\d[A-Z,a-z]{2}$ 

可能會奏效。

編輯:另外,如果你想restric的郵政編碼說那些具有相同的前綴在數據庫中的人可以做到這一點。

var source = "BTasdfweasdf"; //from the database 
var input = "BT1A 1BB"; //from the somewhere else 
var regex = Regex.Replace(source, @"(^[A-z,a-z]{0,2})(.*)", @"$1\d+[A-Z,a-z]?\s\d[A-Z,a-z]{2}$"); 
var match = Regex.Match(input,regex);