使用c#的数字范围的动态正则表达式

本文关键字:动态 正则表达式 范围 数字 使用 | 更新日期: 2023-09-27 18:10:41

我正在看英国邮政编码,并试图找出如何从数据库(the first part of a UK postcode)获取数据,并使用c#动态地为它们创建regexp。例如:

AB44-56

我知道我想要什么作为输出:

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

然而,我不知道我如何能够用逻辑做到这一点,也许我需要先从数字中分离字母,但我不能使用split。

我也有其他的组合-单一范围:

AB31 would be AB[3][1]+

有些只有字母:

BT would be BT+

有些只有一个字母和一个或两个数字:

G83 Would be G[8][3]

任何建议或指导将非常感谢如何这可能编码。

使用c#的数字范围的动态正则表达式

afrom wikipedia英国邮政编码:

这可以概括为:(一个或两个字母)(介于0和之间的数字99)(零或一个字母)(空格)(个位数)(两个字母)

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

编辑:另外,如果你试图限制邮政编码说那些与数据库中的前缀相同的前缀,你可以这样做。

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);