|
本帖最后由 爱疯 于 2012-11-27 11:27 编辑
- Sub Test7()
- Dim regex As Object, matchs As Object, match As Object
- Dim x As String, y As String
- x = "主板720元,硬盘680元,内存320元"
- Set regex = CreateObject("VBScript.RegExp")
- With regex
- .Global = True
- ' .Pattern = "\d+(?=元)" '720680320
- .Pattern = "(?<=硬盘)\d" '错误5017
- ' .Pattern = "(?<=硬盘)\d+(?=元)" '错误5017
- Set matchs = .Execute(x)
- For Each match In matchs
- y = y & match
- Next
- End With
- MsgBox y '希望返回680
- End Sub
复制代码 请问:怎样修改正则表达式,只返回硬盘价格的数字,680.
谢谢!
PS:如果能告知错误5017产生原因,就更好了
零宽断言的四种基本形式,VBA中不支持后发断言,以下是我四种形式的举例 - Sub test()
- Dim x$, regex As New RegExp, matchs, match
- x = "主板720元,硬盘680元,内存320角"
- With regex
- .Global = True
- ' .Pattern = "\d+(?=元)" '零宽度正预测先行断言,返回值正确720 680
- ' .Pattern = "(?<=硬盘)\d+" '零宽度正回顾后发断言,返回值错误,应返回680
- ' .Pattern = "\d{3}(?!角)" '零宽度负预测先行断言,返回值正确720 680
- ' .Pattern = "(?<!硬盘)\d+" '零宽度正回顾后发断言,返回值错误,应返回720 320
- Set matchs = .Execute(x)
- For Each match In matchs
- MsgBox match
- Next
- End With
- End Sub
- '推断: 在VBA中不支持后发断言
复制代码而在正则表达式测试工具中都是可以有返回的,所此可有此推断。基本情况可能这是这样
|
|