正则表达式在c# - uk邮政编码中

e-o*_*-on 1 c# regex

我正在寻找c#中常规表达问题的答案.我正在寻找特定邮政编码格式的匹配,并遇到了问题.这是我正在检查的正则表达式模式:

([A-Z]{1})([0-9]{2})([0-9]{1})([A-Z]{2})
Run Code Online (Sandbox Code Playgroud)

所以,这是寻找一个字母,两个数字,一个数字,两个字母的格式.

当我测试这个时RegexPlanet.com给了我一个匹配,但是当我检查c#时,它给出了一个不寻常的响应.虽然它在输入测试邮政编码时起作用A112BB,当我进入A112BBCCCC时,也带回了一个匹配.有人知道为什么c#选择忽略匹配后的最后一个字符?正如我所说,进入A112BBCCCC测试仪RegexPlanet.com失败并说不匹配.

谢谢

Ron*_*ton 8

你可能会觉得这很有用,它与英国邮政编码一样具体......

    static public bool IsPostCode (string postcode)
    {
    return (
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][0-9][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][0-9][0-9][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][A-HK-Ya-hk-y][0-9][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][A-HK-Ya-hk-y][0-9][0-9][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][0-9][A-HJKS-UWa-hjks-uw][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[A-PR-UWYZa-pr-uwyz][A-HK-Ya-hk-y][0-9][A-Za-z][ ]*[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}$)") ||
        Regex.IsMatch(postcode, "(^[Gg][Ii][Rr][]*0[Aa][Aa]$)")
        );
    }
Run Code Online (Sandbox Code Playgroud)


Vil*_*lx- 5

最后一个字符已被忽略,因为没有开始/结束字符串的标记。这可能就是您想要的:

^([A-Z]{1})([0-9]{2})([0-9]{1})([A-Z]{2})$
Run Code Online (Sandbox Code Playgroud)

正则表达式匹配正在寻找与模式匹配的子字符串。除非您明确标记行的开头/结尾,否则它将与文本中的任何位置匹配。

事实上,我会写得更简单:

^([A-Z])(\d\d)(\d)([A-Z][A-Z])$
Run Code Online (Sandbox Code Playgroud)

甚至

^[A-Z]\d{3}[A-Z]{2}$
Run Code Online (Sandbox Code Playgroud)

然后只需使用该string.Substring()方法即可获取零件。我认为这应该更快/更简单(尽管我认为这是一个偏好问题)。