如何在VBScript中的同一字符串的两个索引位置之间存储所有文本?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在VBScript中的同一字符串的两个索引位置之间存储所有文本?相关的知识,希望对你有一定的参考价值。

所以我要离开这里的内存,因为我现在看不到我想要解决的代码,但我正在处理一些旧的VB脚本代码,其中有一个如下设置的数据连接:

set objCommand = Server.CreateObject("ADODB.command") 

我有一个数据库中的字段存储在这样的变量中:

Items = RsData(“Item”).  

数据库中的这个特定字段是一长串文本:

(即“这是一串文本的一部分......标题一:这是标题之后的文本...标题二:这是标题二之后的更多文本”)。

我希望将文本的某些部分存储为变量,该变量位于该字段内的长文本字符串中的两个索引位置之间。它们由存储在上面文本字段中的标题分隔,如下所示:“标题一:”和“标题二:”,我想要捕获这两个文本标题之间发生的所有文本并将它们存储到自己的文本中变量(即“这里是标题一后的文字......”)。

我该如何实现这一目标?我曾尝试使用InStr方法设置索引,但从我如何理解它的工作方式来看,它只计算字符串特定部分出现的起点。我对此的想法错了吗?既然如此,我也无法让Mid功能正常工作。有人可以告诉我一个如何工作的例子吗?请记住,我只是记忆中的内容所以请原谅我现在无法提供更好的代码示例。我希望我的问题有道理!

我希望今晚有人可以帮我解决问题,所以当我再次接近代码时,明天就可以试试这个!感谢您的努力和任何帮助!

答案

您可以从文本Header开始提取所有子字符串,并在下一个Header或end-of-string之前结束。我使用正则表达式来实现它,它对我有用。看看下面的代码。如果我得到一个更简单的(非正则表达式解决方案),我会更新答案。

码:

strTest = "Header One: Some random text Header Two: Some more text Header One: Some random textwerwerwefvxcf234234 Header Three: Some more t2345fsdfext Header Four: Some randsdfsdf3w42343om text Header Five: Some more text 123213"
set objReg = new Regexp

objReg.Global = true
objReg.IgnoreCase = false
objReg.pattern = "Header[^:]+:([\s\S]*?)(?=Header|$)"      '<---Regex Pattern. Explained later.
set objMatches = objReg.Execute(strTest)
Dim arrHeaderValues()                         '<-----This array contains all the required values
i=-1
for each objMatch in objMatches
    i = i+1
    Redim Preserve arrHeaderValues(i)
    arrHeaderValues(i) = objMatch.subMatches.item(0)      '<---item(0) indicates the 1st group of each match
next

'Displaying the array values
for i=0 to ubound(arrHeaderValues)
    msgbox arrHeaderValues(i)
next
set objReg = Nothing

正则表达式说明:

  • Header - 字面上匹配Header
  • [^:]+: - 匹配任何不是:的字符的1 +次出现。然后匹配:。到目前为止,记住以上两点,我们有匹配的字符串,如Header One:Header Two:Header blabla123:等。现在,这场比赛后的任何内容都与我们相关。因此,我们将在下一次分手中显示的内部捕获。
  • ([\s\S]*?)(?=Header|$) - 匹配并捕获所有内容(包括换行符),直到下一个Header或字符串结尾(由$表示) ([\s\S]*?) - 匹配任何字符的0+次出现并捕获组1中的整个匹配 (?=Header|$) - 匹配并捕获上面的东西,直到字符串Header的另一个实例或字符串的结尾

Click for Regex Demo

替代解决方案(非正则表达式):

strTest = "Header One: Some random text Header Two: Some more text Header One: Some random textwerwerwefvxcf234234 Header Three: Some more t2345fsdfext Header Four: Some randsdfsdf3w42343om text Header Five: Some more text 123213"
arrTemp = split(strTest,"Header")         'Split using the text Header
j=-1
Dim arrHeaderValues()
for i=0 to ubound(arrTemp)                 
    strTemp = arrTemp(i)
    intTemp = instr(1,strTemp,":")        'Find the position of : in each array value
    if(intTemp>0) then
        j = j+1
        Redim preserve arrHeaderValues(j)
        arrHeaderValues(j) = mid(strTemp,intTemp+1)      'Store the desired value in array
    end if
next

'Displaying the array values
for i=0 to ubound(arrHeaderValues)
    msgbox arrHeaderValues(i)
next

如果您不想将值存储在数组中,则可以使用Execute语句在运行时创建具有不同名称的变量,并将值存储在其中。请参阅thisthis以供参考。

以上是关于如何在VBScript中的同一字符串的两个索引位置之间存储所有文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用单个 solr 实例索引和搜索位于同一数据源中的两个不同表或 Solr 模板字段无法正常工作

深拷贝浅拷贝

请教下,怎么查到数组中,某个字符串,在数组中的索引位置?

如何拆分用户输入以使其占用数组中的两个索引位置? (Python)

一种在数组中的两个索引之间交换位置的方法[重复]

如何获取Java中一个String字符串中的某一个字符的“索引值”?