我正在尝试使用 Excel VBA 中的正则表达式来匹配列范围内所有单元格内的模式,并将匹配的模式删除到新的列范围。
例如
- 快乐日托俱乐部 (1124734)
- 法式糕点店 (8985D)
- 国王的储藏室 (G6666642742D)
- 比格鞋业(中国)有限公司 (ZZ454)
本质上,我想删除每个字符串的最后一个括号部分,并将这部分(不带括号)转置到不同的列范围中。
到目前为止我的正则表达式是“(([^)]+))\z”(我不知道这是否真的正确),并嵌入到这个VBA中:
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim Myrange As Range
Sheets("Sheet 1").Activate
Range("FF65536").End(xlUp).Select
LastCell = ActiveCell.Address
Set Myrange = ActiveSheet.Range("FF2:" & LastCell)
For Each C In Myrange
strPattern = "(\(([^\)]+)\)\z)"
If strPattern <> "" Then
strInput = C.Value
strReplace = "$1"
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
Range("FF2").Select = regEx.Replace(strInput, "$1")
Range("DX2").Select = regEx.Replace(strInput, "$2")
End If
End If
Next
我是个新手,所以请原谅明显的错误。
非常感谢,
最佳答案
不,您的正则表达式模式不正确。您应该单独测试您的模式,因为正则表达式是它自己的迷你语言。试试这个模式( Regex101 ):
\((.+)\)$
关于gm
选项:g
表示Global
,m
表示Multiline
,这两个值在您的代码中均设置为 True
。
关于regex - Excel VBA 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33304197/