正则表达式没有得到街道名称

regex doesn't get street name

我正在解析这样的文本:

T-SHIRT SIZE 34CM BUSINESS LOCATED: MONTANA 356

我制作了这个正则表达式:

([A-Z]+) (\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d)

匹配:

SIZE 34

但我希望它匹配:

MONTANA 356

你能帮我拿下吗?

更明确地说:我想避免匹配 "size 34" 因为后面跟着一个字符...我希望正则表达式只在需要时有 ' ' 或 \n 时才进行匹配-待匹配字符串

这里是一个应该有效的修改:([A-Za-z]+) \b(\d{2,5})\b

您需要指定名称的有效符号(我包括大写和小写字母)。我还使用简写来指定 2 到 5 位数字。

关键部分是用单词边界包围数字,\b。这是否解决了您的问题?

你可以尝试使用这个表达式吗? ([\w]+)\s(\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d)\b

碰巧我尝试在 VBA Excel 中学习一些正则表达式。 如果您不提供 RegEx 的代码,则无法回答。 在 VBA 中,模式匹配 "size 34" 和 "Montana 356"。 MatchCollection 数组中的第一个和第二个位置。难不成你只return第一场比赛?

'*** /更新/ 我用这个作为测试函数。

Function RegExpTest(patrn As String, strTest As String) As Variant
Dim regex As New VBScript_RegExp_55.RegExp
Dim Match As Match, Matches As MatchCollection
Dim cnt As Integer, cmb() As Variant
If patrn <> "" Then
    With regex
        .Global = True
        .MultiLine = True
        .IgnoreCase = True
        .Pattern = patrn
    End With
    If regex.test(strTest) Then
        Set Matches = regex.Execute(strTest)
        cnt = Matches.Count
        ReDim cmb((cnt * 3) - 1)
        Dim i As Integer: i = 0
        For Each Match In Matches
            cmb(i) = " m:" & Match.Value & ","
            i = i + 1
            cmb(i) = "i:" & Match.FirstIndex & ","
            i = i + 1
            cmb(i) = "c:" & Match.Length & " |"
            i = i + 1
'            cmb(i) = "sub:" & Match.SubMatches.Count & "|"
'            i = i + 1
        Next
        RegExpTest = Join(cmb)
    Else
        RegExpTest = 0
    End If
End If
Set regex = Nothing
End Function