You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:31:37