2017-05-30 110 views
0

我使用Microsoft VBScript Regular Expressions 5.5在Excel文档的单元格内使用VBA中的正则表达式解析大量文本数据。在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]) 

谁能发现我在做什么错?或者这是不可能的,因为正则表达式的功能如何?

+0

基本上,你想匹配*部署*,但不包含*部署*的话? – Gawil

+2

'“\ bdeploy \ b”'完全匹配单词,要求它被边界包围,如果这是您的要求。也'YourRegExp.IgnoreCase =真' –

+0

我期待具体排除“重新部署”。我会包括“部署”,“部署”等。我对缺乏清晰度表示歉意,OP已更新。 – Alex

回答

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

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

如果你能消除所有的“前缀”部署的话,那么

"\bdeploy\S*" 

会更简单。

+0

这是完美的,并且看起来被VB支持。非常感激! – Alex

0

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

你正在寻找的话是第一个捕获小组。它会捕获每个包含的单词,但不以开头

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

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 
+0

我期待明确排除“重新部署”。我会包括“部署”,“部署”等。我对缺乏清晰度表示歉意,OP已更新。 – Alex

+0

VBA/VBScript不支持正则表达式中的模式修改令牌。 –

+0

@Alex:我编辑了我的答案,告诉我这是不是你想要的 – Gawil

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 
>> 

尝试,如果符合您的规格“一词与‘部署’开始”。