Board logo

标题: [问题求助] [已解决]VBS正则提取(删除)指定字符串 [打印本页]

作者: batman    时间: 2011-5-7 17:20     标题: [已解决]VBS正则提取(删除)指定字符串

近日在vbs中遇到一个问题,先看代码:
  1. Dim str
  2. str = "<br>对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一&#11111990;鸣脱离了他的视&#o39;伐范围,那么他就必须最上去。</br>"
  3. MsgBox RegTest(str, "<br>([^&#.*;]+)</br>")
  4. Function RegTest(vbstr, pattern)
  5.   dim regEx, Matches, Match, regstr
  6.   set regEx = New RegExp
  7.   regEx.Pattern = pattern
  8.   regEx.Global = true
  9.   regEx.IgnoreCase = false
  10.   set Matches = regEx.execute(vbstr)
  11.   for each Match in Matches
  12.     regstr = regstr & Match.value
  13.   Next
  14.   RegTest = regstr
  15. End Function
复制代码
我的原意是去掉str两头的标签以及以$#打头并以;结束的字符串(在例子中为&#11111990;和&#o39;),但搞了n久都没有成功,特来请教大家,还望知道的不吝赐教于我,先在此表示感谢了!

又仔细看了正则的资料并转换了思路,成功解决,代码如下:
  1. Dim str
  2. str = "<br>对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一&#11111990;鸣脱离了他的视&#o39;伐范围,那么他就必须最上去。</br>"
  3. MsgBox RegTest(str, "([<br>/]|&#.[0-9]+;)")
  4. Function RegTest(vbstr, pattern)
  5.   dim regEx, Matches, Match
  6.   set regEx = New RegExp
  7.   regEx.Pattern = pattern
  8.   regEx.Global = true
  9.   regEx.IgnoreCase = false
  10.   set Matches = regEx.Execute(vbstr)
  11.   for each Match in Matches
  12.     vbstr = Replace(vbstr, Match, "")
  13.   Next
  14.   RegTest = vbstr
  15. End Function
复制代码

作者: asnahu    时间: 2011-5-7 19:33

是提取中文字符吗?
  1. (?:[^>]*(?=[$])|[^0-9#&a-zA-Z<>;/]*)
复制代码

作者: batman    时间: 2011-5-7 19:45

2# asnahu
不是的,提取后为:
对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一鸣脱离了他的视伐范围,那么他就必须最上去。
作者: asnahu    时间: 2011-5-7 19:52

这样呢?
  1. (?:[^>;]*(?=&)|(?!=[0-9];)[^;</>a-z0-9#]*)
复制代码

作者: powerbat    时间: 2011-5-7 21:06

为什么不直接用正则自己的Replace:
regEx.Pattern = "<\/?[^<>]+>|&#[^&#;]+;"
regEx.Replace(vbstr, "")
作者: batman    时间: 2011-5-7 22:22

5# powerbat
有区别吗?
作者: powerbat    时间: 2011-5-7 22:31

对正则来说,你调用的那个Replace()函数是“第三方”,更何况用它自己的更方便(至少代码简省一些)。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2