我正在讨论如何识别字符串中的字母数字单词,提取单词,转换为大写,然后将单词替换回字符串。
实施例:
Free Standing Oven or90sdbgfx2 Brushed Stainless Steel
将转换为:
Free Standing Oven OR90SDBGFX2 Brushed Stainless Steel
单词location可以是字符串中的任何位置,字符串中可能有多个字母数字。
答案 0 :(得分:0)
这应该可以解决您的问题 -
Sub Main()
Dim longString, result As String
Dim arrayString() As String
Set objRegExp_1 = CreateObject("vbscript.regexp")
objRegExp_1.Pattern = "((?:[a-z][a-z]*[0-9]+[a-z0-9]*))" 'REGEX for alphanumeric words in the string
longString = "Free Standing Oven or90sdbgfx2 Brushed Stainless Steel"
arrayString = Split(longString, " ") 'Splits the string into an array of words so that each one can be matched with the REGEX pattern to check if its alphanumeric
For i = 0 To UBound(arrayString)
Set regExp_Matches = objRegExp_1.Execute(arrayString(i))
If regExp_Matches.Count = 1 Then
arrayString(i) = UCase(arrayString(i)) 'If a pattern match is found, the corresponding string is converted to uppercase and stored back
End If
Next
result = Join(arrayString, " ") 'Combines elements of the modified array of words into a single string
MsgBox (result)
End Sub
<强>输入强>:
Free Standing Oven or90sdbgfx2 Brushed Stainless Steel
<强>输出强>:
Free Standing Oven OR90SDBGFX2 Brushed Stainless Steel
答案 1 :(得分:0)
我无法说出所使用的正则表达式(归功于@CRAKC)。这是VBA的实现:
Sub VBASample()
Dim tokens() As String
Dim regex As RegExp
Dim idx As Integer
tokens = Split("Free Standing Oven or90sdbgfx2 Brushed Stainless Steel", " ")
Set regex = New RegExp
With regex
.Pattern = "((?:[a-z][a-z]*[0-9]+[a-z0-9]*))"
For idx = 0 To UBound(tokens)
If .Test(tokens(idx)) Then
tokens(idx) = UCase$(tokens(idx))
End If
Next idx
End With
Debug.Print Join$(tokens, " ")
End Sub
您需要引用Microsoft VBScript Regular Expressions 5.5。