首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要C#正则表达式才能匹配四位数序列,但忽略任何单个数字

需要C#正则表达式才能匹配四位数序列,但忽略任何单个数字
EN

Stack Overflow用户
提问于 2012-10-09 01:51:49
回答 3查看 2.5K关注 0票数 2

好的,我需要改进这个问题。让我再试一次:

我需要解析出机场代码后的飞行时间,但两者之间可能有一个数字和空格。

示例数据:

代码语言:javascript
复制
ORD  1100
HOU 1 1215
MAD   4  1300

我试过这个:

代码语言:javascript
复制
([A-Z]{3})\s?\d?\s?(\d{4})

我最终得到了机场代码和一个数字。我需要一个正则表达式,它将忽略机场代码后的所有内容,除了4位数的航班时间。

希望我改进了我的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-09 21:16:27

这是我将使用的答案:

代码语言:javascript
复制
@"([A-Z]{3})\s+(?:[0-9]\s+)?([0-9]{4})"

基本上,它与您试图做的事情非常相似。

第一部分是([A-Z]{3}),它查找3个大写字母并将它们分配给组1(组0是整个字符串)。

第二部分是\s+(?:[0-9]\s+)?,它至少需要一个空格,其中可能包含1位数字。中间的非捕获组要求,如果有一个数字,它必须后跟至少1个空格。这可以防止与ABC 12345之类的内容不匹配。

接下来我们有([0-9]{4}),它简单地匹配了你正在寻找的4位数。这些可以在组2中找到。我在这里使用0-9,因为\d指的数字比我们习惯的数字多(如东阿拉伯数字)。

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 01:53:13

解决方案可能很简单:

代码语言:javascript
复制
\d{4}

根据您的输入,您不需要关心前面的数字。

票数 2
EN

Stack Overflow用户

发布于 2012-10-09 02:08:44

这里有一些小东西,使用后视和前视来确保只有4个数字,并用非数字(或开始/结束)包围它们。

代码语言:javascript
复制
"(?<=[^\d]|^)\d{4}(?=[^\d]|$)"

可以用[\s]替换这两个[^\d],以便只匹配周围有空格的4位数字。

更新:随着您的最新更新,我将我的正则表达式与您的合并(来自评论),并提出了以下内容:

代码语言:javascript
复制
"(?<=[A-Z]{3}\s(\d\s)?)\d{4}(?=\s|$)"

该模式分为三个部分。首先是后视:(?<=PatternHere)。其中的模式必须在我们寻找之前出现/匹配。

下一部分是我们简单的主模式:\d{4},四位数。

最后一部分是lookahead:(?=PatternHere),它与lookbehind几乎相同,但会检查另一端,即forward。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12786908

复制
相关文章

相似问题

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