2016-03-25 70 views
0

我解析像這樣的文字:正則表達式沒有得到街道名稱

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」,因爲後面跟着一個字符......我希望正則表達式只在「想要的」之後出現「待匹配的字符串

+0

您是否還有其他想要捕捉什麼的例子,所以我們可以概括正則表達式?多個正則表達式可以捕獲「蒙大拿356」。 – Till

+0

我會編輯...我的例子不合適... – user2348235

回答

1

下面是應該工作的修改:([A-Za-z]+) \b(\d{2,5})\b

你需要指定哪些符號是有效的名稱(我包括大寫和小寫字母)。我也用一個簡短的數字來指定2到5位數字。

關鍵部分圍繞在字數範圍內的數字,\b。這是否解決您的問題?

+0

作品! :) 我發現這個正則表達式也有效: ([AZ] +)(\ d \ d \ d \ d \ d | \ d \ d \ d \ d d \ d)\ s 它們之間的區別在哪裏? – user2348235

+0

區別在於'Regex'的第一部分。 @ Filkolev的答案可以匹配大小寫字母,而且它們的可讀性也有所不同。你的正則表達式很糟糕。 – developer033

1

你可以嘗試使用這個表達式嗎? ([\w]+)\s(\d\d\d\d\d|\d\d\d\d|\d\d\d|\d\d)\b

+0

工作但已經選擇了答案:) – user2348235

+0

在某些情況下失敗,因爲他使用[\ w]而不是[a-zA-Z]。例如:'123 356 T-SHIRT SIZE 34CM BUSINESS LOCATED'匹配。 – developer033

1

我會嘗試在VBA Excel中學習一些正則表達式。 如果您不提供RegEx代碼,則無法回答。 在VBA中,圖案確實匹配「尺寸34」和「蒙大拿356」。 MatchCollection數組中的第一個和第二個位置。難道你只能返回第一場比賽嗎?

'***/update/ 我用它作爲測試函數。

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 
+0

問題已解決...感謝您的回答! :) – user2348235