使用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]
任何建议或指导将非常感谢如何这可能编码。
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);