好的,我需要改进这个问题。让我再试一次:
我需要解析机场代码之后的飞行时间,但两者之间可能只有一位数字和空格。
示例数据:
ORD 1100
HOU 1 1215
MAD 4 1300
我试过了:
([A-Z]{3})\s?\d?\s?(\d{4})
我最终得到机场代码和一位数字。 除了4位数的飞行时间之外,我需要一个在机场代码之后忽略所有内容的正则表达式。
希望我改进了我的问题。
答案 0 :(得分:2)
解决方案可能很简单:
\d{4}
根据您的输入,您无需关心前面的数字 ..
答案 1 :(得分:1)
这里有一些小东西,使用 lookbehind 和 lookahead 来确保只有4位数字,非数字(或开头/结尾)围绕它们
"(?<=[^\d]|^)\d{4}(?=[^\d]|$)"
两个[^\d]
可以替换为[\s]
,只匹配4位数字及其周围的空格。
<强>更新强> 通过您的最新更新,我将我的正则表达式与您的合并(来自评论)并提出了这个:
"(?<=[A-Z]{3}\s(\d\s)?)\d{4}(?=\s|$)"
该模式有三个部分。首先是 lookbehind :(?<=PatternHere)
。其中的模式必须在之前发生/匹配。
下一部分是我们简单的主要模式:\d{4}
,四位数。
最后一部分是 lookahead :(?=PatternHere)
,它与 lookbehind 几乎相同,但检查另一方, forward < / em>的
答案 2 :(得分:1)
这就是我要用的答案:
@"([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
指的是比我们习惯的数字更多的数字(如东部阿拉伯数字)。