好的,我需要改进这个问题。让我再试一次:
我需要解析出机场代码后的飞行时间,但两者之间可能有一个数字和空格。
示例数据:
ORD 1100
HOU 1 1215
MAD 4 1300我试过这个:
([A-Z]{3})\s?\d?\s?(\d{4})我最终得到了机场代码和一个数字。我需要一个正则表达式,它将忽略机场代码后的所有内容,除了4位数的航班时间。
希望我改进了我的问题。
发布于 2012-10-09 21:16:27
这是我将使用的答案:
@"([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指的数字比我们习惯的数字多(如东阿拉伯数字)。
发布于 2012-10-09 01:53:13
解决方案可能很简单:
\d{4}根据您的输入,您不需要关心前面的数字。
发布于 2012-10-09 02:08:44
这里有一些小东西,使用后视和前视来确保只有4个数字,并用非数字(或开始/结束)包围它们。
"(?<=[^\d]|^)\d{4}(?=[^\d]|$)"可以用[\s]替换这两个[^\d],以便只匹配周围有空格的4位数字。
更新:随着您的最新更新,我将我的正则表达式与您的合并(来自评论),并提出了以下内容:
"(?<=[A-Z]{3}\s(\d\s)?)\d{4}(?=\s|$)"该模式分为三个部分。首先是后视:(?<=PatternHere)。其中的模式必须在我们寻找之前出现/匹配。
下一部分是我们简单的主模式:\d{4},四位数。
最后一部分是lookahead:(?=PatternHere),它与lookbehind几乎相同,但会检查另一端,即forward。
https://stackoverflow.com/questions/12786908
复制相似问题