VB中如何循环提取指定字符串对之间的所有文本?
批量提取指定标签间文本的VB函数优化方案
你写的这个函数已经能搞定单个匹配项的提取了,咱们只需要加个循环逻辑,就能把所有符合条件的文本都抓出来,最后拼成空格分隔的格式。
修改后的完整函数
Public Function GetAllClosedText(ByVal source As String, ByVal opener As String, ByVal closer As String) As String Dim result As String = "" Dim currentPos As Integer = 0 Dim openerLength As Integer = opener.Length Dim closerLength As Integer = closer.Length Do ' 查找当前位置之后的起始标签 Dim indexOfOpener = source.IndexOf(opener, currentPos) If indexOfOpener = -1 Then Exit Do ' 找不到就退出循环 ' 定位到起始标签之后的位置 indexOfOpener += openerLength ' 查找对应结束标签的位置 Dim indexOfCloser = source.IndexOf(closer, indexOfOpener) If indexOfCloser = -1 Then ' 如果找不到结束标签,取从起始标签到末尾的内容 result &= source.Substring(indexOfOpener) & " " Exit Do End If ' 提取当前匹配的文本并添加到结果中 result &= source.Substring(indexOfOpener, indexOfCloser - indexOfOpener) & " " ' 更新下一轮搜索的起始位置为当前结束标签之后 currentPos = indexOfCloser + closerLength Loop While True ' 移除结果末尾多余的空格(如果有的话) If result.EndsWith(" ") Then result = result.Substring(0, result.Length - 1) End If Return result End Function
函数逻辑说明
- 用
Do...Loop循环持续查找所有匹配项,直到找不到起始标签为止 - 每次找到起始标签后,定位到标签结束的位置,再找对应的结束标签
- 提取中间文本后,把下一次搜索的起始位置设为当前结束标签的后面,避免重复匹配
- 最后移除结果末尾可能多余的空格,保证输出格式整洁
测试示例
用你给出的输入文本测试:
Dim inputText As String = "<p style=""text-align: justify;"">aaaaa</p><p style=""text-align: justify;"">ddddd</p><p style=""text-align: justify;"">bbbbb</p>" Dim outputText As String = GetAllClosedText(inputText, "<p style=""text-align: justify;"">", "</p>") ' outputText 的值就是 "aaaaa ddddd bbbbb"
这样就能完美实现你想要的批量提取效果啦!
内容的提问来源于stack exchange,提问作者Joen Doe
相关产品推荐
相关产品推荐

