2016-03-08 127 views
1

我曾與該表達式現在奮鬥2天,所以我想我會要求從知識的世界一些適當的幫助。我希望有人能幫幫忙。正則表達式大寫字母,數字及破折號只有

這是我建讓我我想要的正則表達式。

\S*\d*?-[A-Z]*[0-9]* 

我只希望大寫字母和數字用破折號,所以它得到GC-113AO-1-GC-113AO-2-GC-113,這是偉大的!

「我不想要這個------,但是這是個好GC-113AO-1-GC-113AO-2-GC-113

但是,如果我遇到一個地方有數量之間沒有空格,而只是另一個字符如逗號或一段時間則返回上整節「GC-113,AO-1-GC-113,AO-2-GC-113

一場比賽:「我不想要這個------,但這是很好的GC-113,AO-1-GC-113,AO-2-GC-113

我使用使用RegexBuddy,試圖弄清楚這一點。

這是我使用的是獲得比賽的VBA代碼。

Public Function GetRIs(ByVal vstrInString As String) As Collection 
Dim myRegExp As RegExp 
Dim myMatches As Variant 
Dim myMatch As Variant 

Set GetRIs = New Collection 
Set myRegExp = New RegExp 

myRegExp.Global = True 
myRegExp.Pattern = "\S*\d*?-[A-Z]*[0-9]*" 
Set myMatches = myRegExp.Execute(vstrInString) 

For Each myMatch In myMatches 
    If myMatch.Value <> "" Then 
     GetRIs.Add myMatch.Value 
    End If 
Next 

End Function 

謝謝!因爲只有-是強制性的子模式的其餘部分可以匹配零次(可從字符串缺席) 戴夫

+0

我覺得你正在尋找['\ w +( - ?\ w +)*'](HTTPS ://regex101.com/r/hK4tZ2/1) –

+0

@DaveStuart - 編輯您原來的職位與VBA代碼。此外,我已格式化您的問題。如果有任何格式不正確(「我不想這樣[...]」),請正確格式化。 –

+0

Wiktor,那個人得到所有文本。我正在尋找一個更具體的正則表達式來獲取這三種組合GC-113,AO-1-GC-113,AO-2-GC-113。 –

回答

1

\S*\d*?-[A-Z]*[0-9]*模式甚至可以匹配單個連字符。

您可以使用

myRegExp.Pattern = "\b[A-Z0-9]+(?:-[A-Z0-9]+)+" 

pattern matches

  • \b - 一個字邊界(下一個字母或數字之前必須有一個非文字字符或字符串的開始
  • [A-Z0-9]+ - 一個或多個字母或數字
  • (?:-[A-Z0-9]+)+ - 1以上的序列:
    • - - 一個連字符
    • [A-Z0-9]+ - 一個或多個字母或數字
+1

謝謝Wiktor!這很好地工作,也謝謝你如此清楚地解釋一切。 –

相關問題