在VBA中使用条件正则表达式解析文本

时间:2017-05-30 15:09:30

标签: regex excel vba vbscript regex-negation

我正在使用Microsoft VBScript Regular Expressions 5.5在Excel文档的单元格中使用VBA中的正则表达式解析大量文本数据。

我无法弄清楚如何创建一个正则表达式短语,该短语将与以下内容匹配:“部署”,“部署”,“部署”但不是特别说“重新部署”的内容。到目前为止,我已尝试过以下表达式,但无济于事:

(^[rR][eE])([dD][eE][pP][lL][oO][yY])
(^[rR][eE])?([dD][eE][pP][lL][oO][yY])
.(^[rR][eE])([dD][eE][pP][lL][oO][yY])
*(^[rR][eE])([dD][eE][pP][lL][oO][yY])

有人能发现我做错了吗?或者,鉴于Regex如何运作,这是不可能的?

3 个答案:

答案 0 :(得分:0)

试试这个正则表达式:
redeploy\w*|(\w*deploy\w*)

您正在寻找的单词位于第一个捕获组中。它将捕获包含 deploy 但不以重新部署开头的每个单词。

您也可以尝试以下代码(未经测试):

Dim searchStr As String
searchStr = "redeploy deploying redeployment deploy"
Dim regex As New VBScript_RegExp_55.RegExp
Dim matches
regex.Pattern = "redeploy\w*|(\w*deploy\w*)"
regex.IgnoreCase = True
regex.Global = True
If regex.test(searchStr) Then
    Set matches = regex.Execute(searchStr)
    Dim match As Variant
    For Each match In matches
        Debug.Print match.Submatches(0)
    Next
End If

答案 1 :(得分:0)

使用此:

>> Set r = New RegExp
>> r.IgnoreCase = True
>> r.Pattern = "\bdeploy"
>> For Each w In Split("redeploy deploy deploywhatever misdeploy")
>>     WScript.Echo w, CStr(r.Test(w))
>> Next
>>
redeploy Falsch
deploy Wahr
deploywhatever Wahr
misdeploy Falsch
>>

尝试“以'deploy'开头的单词”符合您的规范。

答案 2 :(得分:0)

"(?!re)\b\S*deploy\S*"

将不匹配重新部署,但会匹配,例如misdeploy,以及各种表单(部署,部署等)

如果你可以删除所有“前缀”部署的单词,那么

"\bdeploy\S*"

会更简单。