我有一個問題,我認爲這是很簡單的模式,但我不知道正確的方式去做。識別單詞
基本上,我想我的程序能夠在它有一定的模式,以確定的話,如果是這樣,提取的模式之前是什麼。
模式是,在這種情況下/F
,特別是在單詞的結尾,它會提取什麼了。
例如,如果程序發現21/F
,它會將其識別爲良好匹配並將提取21
。但如果這個詞是21/Fudge
,它什麼都不會做。
你知道要尋找一個匹配在單詞中的特定位置的方法是什麼?
我有一個問題,我認爲這是很簡單的模式,但我不知道正確的方式去做。識別單詞
基本上,我想我的程序能夠在它有一定的模式,以確定的話,如果是這樣,提取的模式之前是什麼。
模式是,在這種情況下/F
,特別是在單詞的結尾,它會提取什麼了。
例如,如果程序發現21/F
,它會將其識別爲良好匹配並將提取21
。但如果這個詞是21/Fudge
,它什麼都不會做。
你知道要尋找一個匹配在單詞中的特定位置的方法是什麼?
我會做:
If str Like "*/F" Then
before=Left(str, Len(str)-len("/F"))
Else
'No match!
End If
我會使用一個正則表達式,像這樣:
\b\w+?(\d+)\/F\b
這將幫助你「/ F」之前匹配任何數字而忽略其餘這個單詞。爲了在VBA中使用它,你需要添加一個對'Microsoft VBScript Regular Expressions 5.5'的引用,這裏是VBA的背後。模式是「\ b \ w +?(\ d +)/ F \ b」
Public Sub Extract(Pattern as String, Text as String)
Dim regEx As VBScript_RegExp_55.RegExp
Dim matches As VBScript_RegExp_55.MatchCollection
Set regEx = CreateObject("VBScript.RegExp") ' Create a regular expression.
regEx.Pattern = Pattern
Set matches = regEx.Execute(Text)
Dim i as Long
For i = 0 To (matches.Count - 1)
Debug.Print Matches.Item(i)
Next i
End Sub
希望這會有所幫助。
是將與「21 /忽悠」的工作? – matzone
不,「」21/Fudge「就像」*/F「= False。你將不得不分支。 –
謝謝@LS_dev,就像一個魅力! – Phalanx