Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 使用正则表达式提取北美邮政编码_.net_Regex_Capturing Group - Fatal编程技术网

.net 使用正则表达式提取北美邮政编码

.net 使用正则表达式提取北美邮政编码,.net,regex,capturing-group,.net,Regex,Capturing Group,我使用以下正则表达式验证北美邮政编码: (?:(\d{5})(?:-\d{4})?)|(?:([a-zA-Z]\d[a-zA-Z]) ?(\d[a-zA-Z]\d)) 仅供参考,我知道在验证某些位置的某些字符时,可能会更准确 我想做的是使用相同的验证常量来提取以下格式的邮政编码: 00000 or a0a0a0 上面的正则表达式很接近;如果我连接除根之外的所有捕获组,我就会得到我要搜索的结果。例如,美国代码将在组1中捕获,或者加拿大代码将在2+3中捕获 有更好的方法吗?或者,假设它是正则

我使用以下正则表达式验证北美邮政编码:

(?:(\d{5})(?:-\d{4})?)|(?:([a-zA-Z]\d[a-zA-Z]) ?(\d[a-zA-Z]\d))
仅供参考,我知道在验证某些位置的某些字符时,可能会更准确

我想做的是使用相同的验证常量来提取以下格式的邮政编码:

00000
  or
a0a0a0
上面的正则表达式很接近;如果我连接除根之外的所有捕获组,我就会得到我要搜索的结果。例如,美国代码将在组1中捕获,或者加拿大代码将在2+3中捕获

有更好的方法吗?或者,假设它是正则表达式库的一个功能,用于连接所有子组。顺便说一句,这是C.NET

我会让你的第二个[a-zA-Z]\d[a-zA-Z]和第三个\d[a-zA-Z]\d组被动,但让加拿大代码组?:[a-zA-Z]\d[a-zA-Z]?\d[a-zA-Z]\d被动现在是非被动的。在这种情况下,只有两个非被动组:一个用于美国代码,一个用于加拿大代码。我还要为每个组添加:

var regex = new Regex(@"\b(?:(\d{5})(?:-\d{4})?)\b|\b((?:[A-Z]\d[A-Z]) ?(?:\d[A-Z]\d))\b", RegexOptions.IgnoreCase);
var input = @"00000 or a0a 0a0 and not 11111a or b1b1b11";
var postalCodes = regex.Matches(input)
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();

这将匹配00000和a0a 0a0,但将跳过不正确的11111 A和B11。

但它也将匹配B1B1,因此我仍需要规范化空间。这种情况更好。我认为匹配。Value实际上也返回了匹配的非捕获部分?例如:input=00000或a0a0或a0a0或55555-1111,而不是11111a或b1b1b11 postalCodes==[00000,a0a0a0,a0a05555-1111]@shannon:match。Value实际捕获。Value从输入字符串返回捕获的子字符串。我好像不明白你想把原来问题的空格标准化。在这种情况下,组的串联看起来是最好的选择。