首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c#实现数字范围的动态正则表达式

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

Stack Overflow用户
提问于 2011-10-07 03:49:00
回答 1查看 791关注 0票数 1

我正在研究英国的邮政编码,并试图弄清楚如何从数据库(the first part of a UK postcode)中获取数据,并使用c#为它们动态创建正则表达式。例如:

代码语言:javascript
复制
AB44-56

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

代码语言:javascript
复制
AB([4][4-9]|[5][0-6])+

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

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

代码语言:javascript
复制
AB31 would be AB[3][1]+

一些只有字母:

代码语言:javascript
复制
BT would be BT+

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

代码语言:javascript
复制
G83 Would be G[8][3]

任何建议或指导都将非常接近这可能是如何编码的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-07 04:30:40

A来自维基百科英国邮政编码:

可以概括为:(一个或两个字母)(0到99之间的数字)(零或一个字母)(空格)(单个数字)(两个字母)

所以

代码语言:javascript
复制
^[A-Z,a-z]{0,2}\d+[A-Z,a-z]?\s\d[A-Z,a-z]{2}$

也许行得通。

编辑:另外,如果您正在尝试重新划分邮政编码,以表示与数据库中的邮政编码具有相同前缀的邮政编码,则可以执行此操作。

代码语言:javascript
复制
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); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7679688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档