gpt4 book ai didi

string - 通过指定子字符串的第一个和最后一个来提取字符串中的子字符串

转载 作者:行者123 更新时间:2023-12-04 21:03:32 26 4
gpt4 key购买 nike

我想知道是否有一种方法可以通过指定开始的几个字符和结束字符来提取子字符串。

作为一个例子,我在工作簿的一个单元格中的问题底部有一个字符串,每个单元格都有一个类似的大字符串。我想将所有名称提取到一个数组中。

“c1-mc-”将始终是名称的前缀。我希望我可以使用一个函数,我可以在其中指定每个以“c1-mc”开头并以 vbLf(enter) 结尾的子字符串,提取它们。
我认为 Instr() 和 Split() 可以提供帮助,但不确定如何进行。

"Str: 1/2/1
End : 1/2/2
Name: cl-mc-23223322
Name: c1-mc-dddssda
Info: alot of detail
Name: c1-asa-dddssda
task: asdf
Name: c1-mc-xd132eds"



<the code which works>
For Each rng1 In table1.DataBodyRange.Columns(8).Cells

MyString = rng1.Value
Do Until InStr(MyString, "c1-mc") = 0
namestart = InStr(MyString, "c1-mc")
name = Mid(MyString, namestart)
nameend = InStr(name, vbLf) - 1
name = Left(name, nameend) 'this gives you a name
namestart = InStr(name, "c1-mc")
name = Mid(name, namestart)
nameend = InStr(name, " ") - 1
If (nameend = -1) Then
nameend = Len(name)
End If
name = Left(name, nameend) ' gives you name incase there are no next lines
MyString = Replace(MyString, name, "") 'this cuts the original string so it now starts where the name ended.
MsgBox name
i = i + 1
Loop
Next

最佳答案

重新阅读您的问题后进行编辑,我认为我没有正确回答。请详细说明每个单元格中实际包含的内容,以及我们正在谈论多少个单元格(1?)。

字符串是字符的串联。在多行上写你的字符串并不意味着它实际上会改变。正如您所说,当您输入 chr(10) 或 vbLF 时会发生换行。我不确定您发布的字符串的哪一部分要提取。假设您要获取单元格的名称,并且字符串保存在字符串变量 [mystring] 中:

Dim name as string
Dim namestart as integer
Dim nameend as integer

namestart = Instr(Mystring, "c1-mc-" )
name = Mid(Mystring, namestart + 1)
nameend = Instr(Mystring, vbLF)
name = Left(name, nameend)

现在 name 将包含您的字符串的名称。测试它(我没有,你可能需要调整一些小事情),当你拥有它时,使用 for 循环遍历你的单元格并将名称添加到所需的数组中。

编辑2:
由于您想提取单元格中名称的所有实例,因此我将其更改为:
Dim name as string
Dim namestart as integer
Dim nameend as integer
Dim namearray() as string
Dim i as integer

Do Until Instr(Mystring, "c1-mc-" ) = 0 'will continue filling the array until Mystrign no longer has any names)
namestart = Instr(Mystring, "c1-mc-" )
name = Mid(Mystring, namestart + 1)
nameend = Instr(Mystring, vbLF)
name = Left(name, nameend) 'this gives you a name
Mystring = Mid(Mystring, Instr(Mystring, name) ) 'this cuts the original string so it now starts where the name ended.
namearray(i) = name
i = i + 1
Loop

关于string - 通过指定子字符串的第一个和最后一个来提取字符串中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30943096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com