后端VB写程序提取网站的数据。要提取网页代码中的数据,网页基本格式如下
.......
《li》姓名:张三《/li》
《li》年龄:35《/li》
《li》职业:教师《/li》
.....
《li》分数:99《/li》
....
我就要提取分数进行统计,我写的正则表达式内容为《li 》[^\x00]+?分数[^\x00]+?《/li》
提取出来都带有姓名等不必要的信息,提出来是
《li》姓名:张三《/li》
《li》年龄:35《/li》
《li》职业:教师《/li》
.....
《li》分数:99《/li》
这样后期还要再进行按《/li》分割字符再筛选。虽然结果可以出来,但是不是很喜欢。请问怎么改正则定义才能实现只从最靠近"分数"的《li》字符开始提取,提取出来就是《li》分数:99《/li》这段就好了。
谢谢先
不是只提取数字呀,要一整段《li》分数:99《/li》,就是《li》需要最靠近分数左边的这个
补充:我不是要文本内容,我要截“分数”所在的
网页源代码,我现在写的正则把网页源码中出现的第一个“姓名”开始到“分数”后面的给我返回来了。我不知道怎么改成只返回“分数”左边的(就是事列代码中地4个)到“分数”右边的第一个不知道你是用前端语言还是后端语言,如果是后端语言的话有很多第三方开源库可以轻松做到
这样就行了吧
分数:\d+
/S*表示多个字符串
<li>[^<>]+?分数[^<>]+?</li>
有解析html的库 很方便的
如果你需要正则匹配文本内容,正则表达式为:
[\s\S]*。如果对你有帮助,希望你能采纳如果你需要正则匹配文本内容,正则表达式为:
<li>[\s\S]*</li>
。如果对你有帮助,希望你能采纳
内容:
预期的结果是:
经过测试使用这个方式可以提出来。不知道你的意思是不是这样。
表达式:
内容:
《li》s姓名:张三 dsss《/li》
《li》年龄:35 fv《/li》
《li》职sf业:s教师 c《/li》
《li》分数:99 a《/li》
《li》s姓名:张三 《/li》
《li》年s龄:35 《/li》
《li》职dd业:教师cx 《/li》
《li》x分数:100《/li》
预期的结果是:
《li》分数:99 a 《/li》
《li》x分数:100《/li》
经过测试使用这个方式可以提出来。不知道你的意思是不是这样。
表达式:
《li》.*分数.*《/li》
直接用“分数:(\d+)”不就好了?
下面是vb6测试代码:
'此代码由 [正则测试工具 v1.1.43](http://blog.csdn.net/sysdzw/article/details/6141844 "") 自动生成,请直接调用TestReg过程
Private Sub TestReg()
Dim strData As String
Dim reg As Object
Dim matchs As Object, i As Integer, j As Integer
strData = "<li>姓名:张三</li>" & vbCrLf & _
"<li>年龄:35</li>" & vbCrLf & _
"<li>职业:教师</li>" & vbCrLf & _
"....." & vbCrLf & _
"<li>分数:99</li>" & vbCrLf & _
"<li>姓名:张三</li>" & vbCrLf & _
"<li>年龄:35</li>" & vbCrLf & _
"<li>职业:教师</li>" & vbCrLf & _
"....." & vbCrLf & _
"<li>分数:88</li>"
Set reg = CreateObject("vbscript.regExp")
reg.Global = True
reg.IgnoreCase = False
reg.MultiLine = True
reg.Pattern = "分数:(\d+)"
Set matchs = reg.Execute(strData)
For i = 0 To matchs.Count - 1
Debug.Print i + 1 & "." & matchs(i)
For j = 0 To matchs(i).SubMatches.Count - 1
Debug.Print "(" & j + 1 & ")." & matchs(i).SubMatches(j) & " ";
Next
If matchs(i).SubMatches.Count > 0 Then Debug.Print
Next
End Sub
第一,如果要提取html的数据,最好使用xpath加正则。
第二,如果要用正则,可以用分组捕获,就是使用()括起来你要的,然后调用正则的match对象(从MatchCollection中提取),在将match中的SubMatches就是每个捕获组的值。比如第一个括号的内容就是match.SubMatches(0)