You need to enable JavaScript to run this app. VB.NET 是否存在可提取两个指定字符串间内容的内置函数?
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET 是否存在可提取两个指定字符串间内容的内置函数?

VB.NET 字符串区间提取的内置能力说明

首先给你明确的结论:

  • VB.NET 没有专门封装的、拿来就能用的内置函数,可以直接实现“从指定偏移位置开始,抓取两个自定义字符串之间的内容,同时返回下一次查找的起始下标”这类需求。
  • 你写的这个getBetween函数,本身就是靠框架原生的基础字符串方法拼出来的,逻辑清晰、完全能用,已经覆盖了这类场景的常规需求。

可用来简化实现的框架自带能力

虽然没有专门的高层封装,但你完全可以用内置的两类API写出等效甚至更稳的实现,不用引入任何第三方组件:

  1. 原生字符串基础方法
    你代码里用到的String.IndexOf(查找指定字符串位置)、String.Substring(截取指定区间的子串),就是框架提供的最底层的字符串操作原子能力。框架之所以不往上再封一层“两分隔符抓内容”的方法,是因为这类场景的边界规则实在太杂:比如找不到分隔符时是抛错还是返回空、遇到嵌套分隔符要匹配哪一层、要不要忽略大小写、要不要跳过转义的分隔符——根本不存在能适配所有人需求的通用实现,所以框架只把最基础的查找、截取能力开放出来,具体逻辑交给开发者组合。
  2. 内置正则表达式类
    框架自带的System.Text.RegularExpressions.Regex可以把同类逻辑写得更简洁,不需要手动跟踪查找的偏移位置,还能更灵活地处理各种边界情况。
    对应你测试场景的参考写法:
    ' 转义自定义分隔符里的正则特殊字符,避免语法冲突
    Dim pattern As String = Regex.Escape(startSearch) & "(.*?)" & Regex.Escape(endSearch)
    ' 一次匹配所有符合规则的区间
    For Each m As Match In Regex.Matches(strSource, pattern)
        ' Groups(1)就是两个分隔符中间的内容
        Dim currentContent = m.Groups(1).Value
        ' 匹配结束的位置,就是你原函数返回的nextIndex
        Dim nextSearchIndex = m.Index + m.Length
    Next
    
    用正则实现还有个好处:不会像你原函数那样,一旦IndexOf返回-1(找不到分隔符)就直接触发索引越界异常,可以很方便地加规则忽略无效匹配,程序的鲁棒性更强。

对你现有实现的小优化建议

你设计的三组测试已经覆盖了多字符分隔符、嵌套分隔符的常见场景,当前的getBetween只要补个边界判断就很完善了:

' 在函数开头加判断,找不到起始/结束标记时返回明确的空值,避免崩溃
Dim IndexStart = strSource.IndexOf(startSearch, startSearchIndex)
If IndexStart < 0 Then Return (startSearchIndex, String.Empty)
Dim indexEnd = strSource.IndexOf(endSearch, IndexStart + startSearch.Length)
If indexEnd < 0 Then Return (strSource.Length, String.Empty)

内容的提问来源于stack exchange,提问作者Vibi Chrisbud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 15:45:10