【问题标题】:regex doesn't get street name正则表达式没有获得街道名称
【发布时间】:2016-03-25 21:39:54
【问题描述】:

我正在解析这样的文本:

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

你能帮我弄到吗?

更明确地说:我想避免匹配“大小 34”,因为后面跟着一个字符......我希望正则表达式只在想要成为的 ' ' 或 \n 之后进行匹配-匹配的字符串

【问题讨论】:

  • 您是否有其他示例来说明您想要捕获的内容,以便我们可以概括正则表达式?多个正则表达式可以捕获Montana 356
  • 我会编辑...我的示例不合适...

标签: regex string parsing text street-address


【解决方案1】:

这是一个应该可以工作的修改:([A-Za-z]+) \b(\d{2,5})\b

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

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

【讨论】:

  • 有效! :) 我发现这个正则表达式也可以工作: ([AZ]+) (\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d )\s 他们做的比赛有哪些区别?
  • 区别在于Regex的第一部分。 @Filkolev 的答案同时匹配小写和大写字母,而且它们的可读性也有所不同。您的正则表达式示例很糟糕。
【解决方案2】:

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

【讨论】:

  • 在某些情况下它会失败,因为他使用的是 [\w] 而不是 [a-zA-Z]。例如:123 356 T-SHIRT SIZE 34CM BUSINESS LOCATED 匹配。
【解决方案3】:

我尝试在 VBA Excel 中学习一些正则表达式。 如果您不提供 RegEx 的代码,则无法回答。 在 VBA 中,该模式确实匹配“34 号”和“蒙大拿州 356”。 MatchCollection 数组中的第一个和第二个位置。会不会只返回第一个匹配项?

'*** /更新/ 我将其用作测试功能。

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

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 2011-06-28
    • 2019-03-16
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多