2013-01-31 83 views
0

我擺弄正則表達式來縮短我一直在使用的字符串拆分例程。正則表達式Vbscript

我已經提交到ASP腳本爲我的車一個字符串,如下所示:

addnothing|-1, addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0, addnothing|-1 

我希望能夠提取兩個條目代表兩個項:

addRST115400112*2xl|0 
addRST115400115*xs|0 

我設法讓這段代碼工作,但我不確定我現在用的模式:

add[^n](.*)\*(.*)\|[0-9], 

這將返回此:

addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0, 

但我只希望它返回:

addRST115400112*2xl|0 
addRST115400115*xs|0 

任何人都可以點我在正確的方向嗎?

回答

1

(因爲它可以使你的情況下,它結束了吃,直到最後\|[0-9]|0.*吃多)

你都匹配它貪婪地你應該與之相匹配的懶洋洋地使用.*?代替.*


所以,你的正則表達式應該是

add(?!nothing)(.*?)\*(.*?)\|\d 

\d類似於[0-9]

(?!nothing)只是一個check..it不匹配或消費anything..it更好然後[^n] cuz它更可靠,表現力和犯規吃什麼

+0

是驚人太感謝你了 – EvilKermitSaurus

+0

有一個跟進我的問題是我也將傳遞一個remRST115400112 * 2×1 | 0從籃子中刪除的項目,我不;噸希望必須使用不同的功能來搜索我想要達到的目標。 – EvilKermitSaurus

+1

@GrahamCole你可以使用'(add | rem)(?! nothing)(。*?)\ *(。*?)\ | \ d'..if我得到了你的權利 – Anirudha

0

嘗試保持.Pattern簡單(!這是VBScript)的和,使與它擺弄容易(真正單打缺貨的商品絕不是明確的):

Dim sInp : sInp  = "addnothing|-1, addRST115400112*2xl|0, addnothing|-1, addnothing|-1, addRST115400115*xs|0, addnothing|-1" 
    Dim reCut : Set reCut = New RegExp 
    reCut.Global = True 
    reCut.Pattern = "addR[^|]+\|\d" 
    Dim oMTS : Set oMTS = reCut.Execute(sInp) 
    If 2 = oMTS.Count Then 
    WScript.Echo "Success:", Join(Array(oMTS(0).Value, oMTS(1).Value)) 
    Else 
    WScript.Echo "Bingo:", reCut.Pattern 
    End If 

輸出:

Success: addRST115400112*2xl|0 addRST115400115*xs|0 
+0

我明白了你的觀點,但股票代碼並不遵循特定的模式,當然也不一定以R開頭。我的問題有一個後續問題,我將通過remRST115400112 * 2xl | 0刪除該項目。 – EvilKermitSaurus