请问这个正则表达式应该怎么修改才能实现截取最靠近中间字符的某个字符串开始截取字符 5C

后端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个)到“分数”右边的第一个

11个回答

这样就行了吧

 分数:\d+
zhkbx
zhkbx 回复u011799966: 谢谢您,但是我只需要“分数”这条list的网页代码内容。不是需要文本内容,可能我表达方式不对,没有说清楚
一年多之前 回复
u011799966
狂奔的菜鸟 如果你需要正则匹配文本内容,正则表达式为:<li>[\s\S]*</li>。如果对你有帮助,希望你能采纳
一年多之前 回复
zhkbx
zhkbx 回复showbo: 谢谢您的答复,实际上网页内容很复杂的,我只是简化了编辑帖子而已,实际应用就是需要这段代码内容和格式的。这个合理性请忽略。我就是想问下如何不只从最靠近分数左边的这个《li》开始截,因为现在系统都是从网页代码第一个《li》开始截取返回给我。搞得我后续还要按《/li》分割后取最后这段代码。谢谢您
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复zhkbx: 你要li干嘛,要分数就这个正则就行了,如果分数的冒号间有空格就是 分数\s*:\s*\d+
一年多之前 回复
zhkbx
zhkbx 就是怎么只从最靠近“分数”左边的《li》开始截取,系统现在是从网页第一个《li》给我截了
一年多之前 回复
zhkbx
zhkbx \d 只是匹配数字,我要一段的代码。
一年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 +1
一年多之前 回复

/S*表示多个字符串

<li>[^<>]+?分数[^<>]+?</li> 
jslang
天际的海浪 回复zhkbx:那试试这个 <li>((?!<li>)[\s\S])*?分数[\s\S]*?</li>
一年多之前 回复
zhkbx
zhkbx 回复jslang: 谢谢您,但是代码中间还有很多html标签的,上面说了,例子只是我简化了而已。中间排除<>的方法不行呢。
一年多之前 回复
jslang
天际的海浪 +号应该改成*号 <li>[^<>]*?分数[^<>]*?</li>
一年多之前 回复
jslang
天际的海浪 回复zhkbx: 不会啊。我这个中间是不能包含<和>字符的啊
一年多之前 回复
zhkbx
zhkbx 谢谢您,您这个格式跟我的一样。不能截取到紧挨着“分数”的<li>,还是把代码中第一个<li>开始到分数后面的</li>给我返回来了。
一年多之前 回复

不知道你是用前端语言还是后端语言,如果是后端语言的话有很多第三方开源库可以轻松做到

zhkbx
zhkbx 回复M_Maek: 谢谢您。我找找看看
一年多之前 回复
M_Maek
M_Mark 回复zhkbx: nsoup和html-agility-pack两个都是做C#爬虫的开源库
一年多之前 回复
zhkbx
zhkbx 您能给个第三方开源库的名字吗,谢谢您
一年多之前 回复

有解析html的库 很方便的

如果你需要正则匹配文本内容,正则表达式为:

[\s\S]*。如果对你有帮助,希望你能采纳
zhkbx
zhkbx 我不是要文本内容,我要截“分数”所在的 网页源代码,我现在写的正则把网页源码中出现的第一个“姓名”开始到“分数”后面的给我返回来了。我不知道怎么改成只返回“分数”左边的(就是事列代码中地4个)到“分数”右边的第一个
一年多之前 回复

如果你需要正则匹配文本内容,正则表达式为:

 <li>[\s\S]*</li>

。如果对你有帮助,希望你能采纳

zhkbx
zhkbx 谢谢您。但是我不是要文本内容,我要截“分数”的<li>网页源代码,我现在写的正则把网页源码中出现的第一个<li>开始到“分数”后面的第一个</li>给我返回来了。我不知道怎么改成只返回“分数”左边的<li>(就是事列代码中地四个<li>)到“分数”右边的第一个</li>
一年多之前 回复

内容:

s姓名:张三 dsss
年龄:35 fv
职sf业:s教师 c
分数:99 a

s姓名:张三
年s龄:35
职dd业:教师cx
x分数:100

预期的结果是:

分数:99 a
x分数:100

经过测试使用这个方式可以提出来。不知道你的意思是不是这样。
表达式:

.*分数.*

内容:

《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

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!