【问题标题】:VB.NET Regex Match 5 and 10 char Zip Code in 1 GroupVB.NET 正则表达式匹配 5 和 10 个字符的邮政编码在 1 组中
【发布时间】:2026-01-14 16:25:01
【问题描述】:

我正在使用此代码

(\d{5})([\-]\d{4})?\s*

与我的邮政编码匹配

12345-1234

2组

1. 12345
2. -1234

我需要它来匹配 1 个组中的 12345(5 个字符 zip)和 12345-1234(10 个字符 zip)。这可能吗?

编辑:

(\d{5}-\d{4}|\d{5})

(感谢 vcsjones)满足原始问题。

但是,如果 Zip 格式错误(例如 12345-123),它不会仅检索 12345

有什么办法吗?

【问题讨论】:

    标签: regex vb.net regex-group


    【解决方案1】:

    你可以试试这个:

    (\d{5}-\d{4}|\d{5})
    

    编辑:

    但是,如果 Zip 格式错误(例如 12345-123),它不会仅检索 12345

    你确定吗?这会产生一个匹配:

    Dim zip5 As String = "12345"
    Dim zip9 As String = "12345-6789"
    Dim partialZip9 = "12345-33"
    Dim regex As New Regex("(\d{5}-\d{4}|\d{5})")
    Dim zip5Match = regex.Match(zip5).Groups(0).Value 'Produces 12345
    Dim zip9Match = regex.Match(zip9).Groups(0).Value 'Produces 12345-6789
    Dim partialZip9Match = regex.Match(partialZip9).Groups(0).Value 'Produces 12345
    

    【讨论】:

    • 编辑:它有效。但它不适用于格式错误的 Zip 12345-123。在这种情况下,有没有办法只得到前 5 位数字?
    • @Theveloper 在 regexhero.net 上似乎对我有用。您能否发布使用正则表达式的完整代码以及示例输入和预期输出?
    • 这仅适用于 12345! (很抱歉造成混淆)但是,我没有正确地提出原始问题。如果邮政编码格式不正确 12345-12 或 12345-123,有没有办法只匹配 12345
    • @Theveloper 你确定吗?我用一些似乎有效的代码编辑了我的答案。
    • 你是对的,一定是我包裹的文本导致正则表达式执行不正确。谢谢!
    最近更新 更多