当前位置:编程学习 > VB >>

============= VB 如何最有效率地截取其中的字符串内容?=========

做一个用VB读取网页内容的程序,其中涉及到截取内容。

但返回的内容非常复杂,并且其中有太多的标记,请教如何截取最好。

比如网页中间有一段“......张三......读书......15......本...李四...读书......54......本......王五......写笔记......20......篇......”(注意......是省略而不是字符串,......里面可能包含很多网页标记内容),


我想截取其中的如下内容:

张三读书15本
李四读书54本
王五写笔记20篇

如何截取最科学呢? --------------------编程问答-------------------- 利用网页的标记为分割截取

--------------------编程问答-------------------- 你上一段不带省略号的,大家才好帮你出主意。 --------------------编程问答-------------------- 设计到人工智能阿。。
VB可没法简单做到。 --------------------编程问答-------------------- 网页标记符无非就那几种,所以用正则表达式最好。 --------------------编程问答-------------------- 请求具体的方法谢谢。 --------------------编程问答-------------------- 比如网页中间有一段“......张三......读书......15......本...李四...读书......54......本......王五......写笔记......20......篇......”(注意......是省略而不是字符串,......里面可能包含很多网页标记内容), 

规律也是有的,就是所以字符串中只有两个“读书”,只有一个“写笔记”,并且在网页中(标记当然已被浏览器解释掉)表现是连续的,也就是像这样的:

张三读书15本 
李四读书54本 
王五写笔记20篇 
--------------------编程问答-------------------- 对了,每个人名的前面都有规律的字样:
7天张三读书15本 
7天李四读书54本 
7天王五写笔记20篇 
--------------------编程问答-------------------- 有那么点点规律吧,
先用网页标记截断,
然后都是每隔4个有特征的字符串,作一次处理 --------------------编程问答-------------------- 用正则表达式处理吧 --------------------编程问答--------------------

<table width="75%">
  <tr> 
    <td width="36%">7天</td>
    <td width="14%">张三</td>
    <td width="15%"> </td>
    <td width="17%">读书</td>
    <td width="18%">15</td>
    <td width="18%">本</td>
    <td width="18%"> </td>
    <td width="18%"> </td>
  </tr>
  <tr> 
    <td>7天</td>
    <td colspan="2">李四</td>
    <td> </td>
    <td>读书</td>
    <td>54</td>
    <td>本</td>
    <td> </td>
  </tr>
  <tr> 
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
  </tr>
  <tr> 
    <td>7天</td>
    <td colspan="2">王五</td>
    <td> </td>
    <td>写笔记</td>
    <td> </td>
    <td>20</td>
    <td>篇</td>
  </tr>
  <tr> 
    <td>详情请查看</td>
    <td colspan="2"> </td>
    <td colspan="3"><a href="http://www.baidu.com/?w=%B2%E9%BF%B4">百度搜索</a></td>
    <td> </td>
    <td> </td>
  </tr>
</table>



比如是上面的网页内容,如何取出:

[color=#0000FF]7天 张三   读书 15 本     
7天 李四   读书 54 本   
7天 王五   写笔记   20 篇 
详情请查看   百度搜索 


并且“百度搜索”中的链接网址也取出来。


非常感谢。[/color] --------------------编程问答-------------------- 用dhtml方法
WebBrowser1.Document.all.tags("select").options

表格,行是table.rows,列则是table.rows(0).cells

http://blog.csdn.net/sysdzw/archive/2009/08/19/4463844.aspx --------------------编程问答--------------------
Set ie = CreateObject("internetexplorer.application")
'ie.visible = True
Call ie.navigate("c:\test.htm")
MsgBox ie.Document.childnodes(0).innertext
Call ie.quit

网页存为c:\test.htm
以上内容存为test.vbs
双击运行vbs即可. --------------------编程问答-------------------- 我这里有个范例,你可以看看
通过XML读取网页内容并分析取得需要的数据
http://download.csdn.net/source/639058 --------------------编程问答--------------------
Set ie = CreateObject("internetexplorer.application")
ie.visible = True
Call ie.navigate("c:\test.htm")
MsgBox ie.Document.childnodes(0).innertext
MsgBox ie.Document.links(0).href
Call ie.quit


这样就可以提取链接了,貌似不是很难:-> --------------------编程问答-------------------- 用组件真方便。

刚我还帮楼主研究了半天正则呢,太麻烦,放弃了。 --------------------编程问答-------------------- 飘过 --------------------编程问答-------------------- 不是要取全部文字哦,意思是要截取的。 --------------------编程问答-------------------- 看看我上面给你的例子,还有下面的东西你就明白了
http://topic.csdn.net/u/20090817/21/0303bff5-27d0-43c1-bc82-acf418dcba58.html --------------------编程问答-------------------- 先获取页面文本,再用正则表达式提取. --------------------编程问答-------------------- 取得网页全部文本的方法解决了。

如何截取其中的需要文本和所有链接呢有无效率的方法?

各位大侠请具其详,谢谢。 --------------------编程问答--------------------
引用 15 楼 slowgrace 的回复:
用组件真方便。

刚我还帮楼主研究了半天正则呢,太麻烦,放弃了。

啥组件??? --------------------编程问答--------------------
引用 21 楼 king06 的回复:
引用 15 楼 slowgrace 的回复:
用组件真方便。

刚我还帮楼主研究了半天正则呢,太麻烦,放弃了。

啥组件???

同问? --------------------编程问答-------------------- 我说的是Andy的方法。11楼和13楼的回复貌似也是用现成的组件的方法。 --------------------编程问答--------------------
引用 12 楼 sonic_andy 的回复:
VBScript codeSet ie=CreateObject("internetexplorer.application")'ie.visible = TrueCall ie.navigate("c:\test.htm")MsgBox ie.Document.childnodes(0).innertextCall ie.quit
网页存为c:\test.htm
以上内容存为test.vbs
双击运行vbs即可.

你的这个网页要是以下这样什么也不显示:(为什么?节点不对了?)文件名也用test.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>无标题页</title>
</head>
<body>
<table width="75%">
  <tr> 
    <td width="36%">7天</td>
    <td width="14%">张三
</td>
    <td width="15%"> </td>
    <td width="17%">读书</td>
    <td width="18%">15</td>
    <td width="18%">本</td>
    <td width="18%"> </td>
    <td width="18%"> </td>
  </tr>
  <tr> 
    <td>7天</td>
    <td colspan="2">李四</td>
    <td> </td>
    <td>读书</td>
    <td>54</td>
    <td>本</td>
    <td> </td>
  </tr>
  <tr> 
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
    <td> </td>
  </tr>
  <tr> 
    <td>7天</td>
    <td colspan="2">王五</td>
    <td> </td>
    <td>写笔记</td>
    <td> </td>
    <td>20</td>
    <td>篇</td>
  </tr>
  <tr> 
    <td>详情请查看</td>
    <td colspan="2"> </td>
    <td colspan="3"><a href="http://www.baidu.com/?w=%B2%E9%BF%B4">百度搜索</a></td>
    <td> </td>
    <td> </td>
  </tr>
</table>

</body>
</html>
--------------------编程问答-------------------- '还用以上网页,我给楼主个另类解法,仅供参考:
'首先保证你的机子上装有EXCEL
'form1上添加(text1设置它的MultiLine为True,再添加command1)
Private Sub Command1_Click()
    Dim Excel_app As Object
    Set Excel_app = CreateObject("Excel.Application")
    Excel_app.Visible = False
    Excel_app.Workbooks.Open (App.Path & "\test.htm")
    Excel_app.DisplayAlerts = False
    Excel_app.ActiveWorkBook.SaveAs FileName:=App.Path & "\a.csv", FileFormat:=6
    Excel_app.Quit
    Set Excel_app = Nothing
    Dim tmp As String   
    Open App.Path & "\a.csv" For Input As #1
    Do While Not EOF(1)
       Line Input #1, tmp
       tmp = Replace(tmp, ",", "")
       If tmp <> "" Then Text1 = Text1 & tmp & vbNewLine
    Loop
    Close #1
    Kill App.Path & "\a.csv"
End Sub
--------------------编程问答-------------------- 'VB普通文件处理功能,也能处理出你要的结果,就是比较麻烦
'不建议这样做,原因是你很难判断出超文本标记:
'<table>与< table >在IE里一样,在VB里不一样,你还得处理

'仅做取HTML文件中第一张表中的第一个连接为例:

Private Sub Command1_Click()
   Open IIf(Len(App.Path) > 3, App.Path & "\", App.Path) & "test.htm" For Input As #1
   Dim tmpStr As String, tmpStr1 As String
   Do While Not EOF(1)
      Line Input #1, tmpStr
      tmpStr1 = tmpStr1 + CStr(tmpStr) + vbNewLine
   Loop
   Close #1
   tmpStr1 = Mid(tmpStr1, InStr(tmpStr1, "<table"))
   tmpStr1 = Mid(tmpStr1, 1, InStr(tmpStr1, "</table>") + 8) '取得第一张表
   Dim iURL As String
   iURL = Mid(tmpStr1, InStr(tmpStr1, "href=""") + 6)
   iURL = Mid(iURL, 1, InStr(iURL, """") - 1) '取得第一张表中的第一个连接
   MsgBox iURL
End Sub
--------------------编程问答-------------------- 力推正则!
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,