Rah*_*hul 1 vbscript vba ms-word
我通过 http 请求响应文本将 StrTxt 作为 html 字符串。我想在 StrTxt 中找到所有出现的 '"string"'。
像这样的东西。
for each string in StrTxt
StrTxt = "all matched strings from StrTxt"
do something StrTxt.
Run Code Online (Sandbox Code Playgroud)
编辑 这被标记为可能重复,但事实并非如此。 如何遍历 word 文档中的每个单词 - VBA 宏解释了如何在文档中查找字符串而不是字符串。
这很简单。如何找到所有带有字符串的字符串?我的标题不是说明了一切吗?
编辑 2
根据 Ansgar Wiechers 的回答,我尝试了以下方法。
Do
i = InStr(strtxt, "startstring")
If i > 0 Then
strtxt = Mid(strtxt, i, Len(strtxt) - i)
i = InStr(InStr(strtxt, "midstring") + 1, strtxt, "endstring")
If i > 0 Then
strtxt = Left(strtxt, i + Len(endstring)) ' I am using i+4 as I know the length
WScript.Echo strtxt
End If
End If
Loop While i > 0
Run Code Online (Sandbox Code Playgroud)
它只出现一次。如何正确循环?
如果您想使用InStr特定子字符串的所有出现来搜索字符串,您需要重复调用该函数,在最后一次匹配后开始每个新搜索(至少)一个字符。
response = "..." 'your HTTP response string
srch = "..." 'the string you want to find in the response
start = 1
Do
pos = InStr(start, response, srch, vbTextCompare)
If pos > 0 Then
start = pos + 1 'alternatively: start = pos + Len(srch)
WScript.Echo pos
WScript.Echo Mid(response, pos, Len(srch))
End If
Loop While pos > 0
Run Code Online (Sandbox Code Playgroud)
如果您希望比较区分大小写,请替换vbTextCompare为vbBinaryCompare.
编辑:要查找以某个字符串开头、包含另一个字符串并以第三个字符串结尾的模式,最好使用正则表达式。@TylerStandishMan已经在他的回答中展示了基本原则,但是在您的场景中需要注意一些事项。
response = "..." 'your HTTP response string
startTerm = "startstring"
midTerm = "midstring"
endTerm = "endstring"
Set re = New RegExp
re.Pattern = startTerm & "[\s\S]*?" & midTerm & "[\s\S]*?" & endTerm
re.Global = True
re.IgnoreCase = True 'if required
For Each m In re.Execute(response)
WScript.Echo m
Next
Run Code Online (Sandbox Code Playgroud)
正则表达式中的某些字符具有特殊含义(例如.匹配除换行符之外的任何字符),因此您需要确保开始、中间和结束术语中的任何此类字符都已正确转义(例如\.用于匹配文字点)。如果您要匹配的子字符串跨越多行,您需要匹配搜索词之间的任意文本的表达式部分以包含换行符(例如[\s\S]匹配任何空白或非空白字符)。您可能还想让匹配变得非贪婪,否则您将获得从 的第一次出现startTerm到最后一次出现的单个匹配endTerm。这就是修饰符*?的用途。
| 归档时间: |
|
| 查看次数: |
12600 次 |
| 最近记录: |