0

我正在摆弄正则表达式来缩短我一直在使用的字符串拆分例程。

我的购物车有一个字符串,该字符串提交给 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

有人可以指出我正确的方向吗?

4

2 回答 2

1

贪婪地匹配它(.*尽可能多地吃,所以在你的情况下它最终会吃到最后一个\|[0-9]ie |0

您应该使用而不是懒惰地匹配它.*?.*


所以你的正则表达式应该是

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

\d类似于[0-9]

(?!nothing)只是一个检查..它不匹配或消耗任何东西..它更好[^n]因为它更可靠,富有表现力并且不吃任何东西

于 2013-01-31T12:28:44.183 回答
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
于 2013-01-31T12:38:28.653 回答