Regex VBA使用正则表达式拆分字符串

Regex VBA使用正则表达式拆分字符串,regex,vba,split,delimiter,Regex,Vba,Split,Delimiter,希望有人能为我的工作提供更好的方法。不幸的是,数据和代码位于客户端系统上,因此我无法共享它们 我有一个长字符串,它以前是一个数据表,需要再次将值拆分为行和列。系统被严重锁定,所以我只能使用VBA。我能想到的最好的方法是使用正则表达式来标识列和行。我已经设置了正则表达式对象,并对输入字符串执行了操作,获得了所需的所有匹配项,这很好。问题是如果我这样做 re = CreateObject("VBScript.RegExp") re.pattern = mypattern re.split(myStr

希望有人能为我的工作提供更好的方法。不幸的是,数据和代码位于客户端系统上,因此我无法共享它们

我有一个长字符串,它以前是一个数据表,需要再次将值拆分为行和列。系统被严重锁定,所以我只能使用VBA。我能想到的最好的方法是使用正则表达式来标识列和行。我已经设置了正则表达式对象,并对输入字符串执行了操作,获得了所需的所有匹配项,这很好。问题是如果我这样做

re = CreateObject("VBScript.RegExp")
re.pattern = mypattern
re.split(myString)
就我所见,没有办法保留我正在拆分的值。在某些情况下,我想在正则表达式字符串的中间分割。< /P> 我认为最有希望的解决办法是

re = CreateObject("VBScript.RegExp")
re.pattern = mypattern
Set matches = re.execute(myString)
for each match in matches:
    'do something with match.firstindex
我考虑只插入分隔符,然后使用拆分。不幸的是,VBA似乎没有将字符插入字符串的方法—使用firstindex看起来有点笨拙


有人对更好的方法有什么想法吗?非常感谢。实际上,您可以在字符串中插入字符。取决于您对“笨重”的定义,但以下是一个示例:

ActiveCell.Characters(5, 1).Insert (" | ")
这将在单元格的第五个字符处放置一个“|”。您可能需要使用find或通过单元格字符的一些循环来识别某些位置,但我认为这可能会让您走上正轨

使用字符串编辑更新 这只是我的偏好,但编辑字符串似乎不太笨重。您可以使用此设置获得您想要的:

Sub StringSlicerSample()
Dim teststring As String, Separater As String, tangoTxt As String, BeforeTXT As String, AfterTxt As String, MidTxt As String
Dim Position_To_Slice As Integer

teststring = "xxxbangyyy"    
Separater = " | " 'can be whatever you want as separator    
tangoTxt = "bang" 'text to look for that you want use for split
Position_To_Slice = 1 'If you want to split somewhere in between, lets say after the "b"
'put =1 as that's the first position in "bang"

'Insert separator before
BeforeTXT = Mid(teststring, 1, InStr(1, teststring, tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt), Len(teststring))

'Insert after
AfterTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Len(tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Len(tangoTxt), Len(teststring))

'Split inbetween based on position to slice
MidTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Position_To_Slice - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Position_To_Slice, Len(teststring))


MsgBox BeforeTXT, Title:="Before Example"
MsgBox AfterTxt, Title:="After Example"
MsgBox MidTxt, Title:="Sliced in position " & Position_To_Slice

End Sub

如果没有任何(甚至是虚拟)数据,则不清楚如何提供帮助。非常确定的是,
匹配
需要是一个对象引用,因此使用
Set
关键字进行分配。问:为什么不使用早期绑定来处理您不熟悉的API?谢谢您的想法。稍后我将尝试共享数据/字符串的更好描述。我没有遇到“早期绑定”这个词,但看起来我正在使用它。我只是在stackoverflow编辑器中输入了上面的代码,因为我无法访问我实际使用的代码。是的,我认为set关键字是必需的。谢谢,这很有用。我正在考虑将其添加到VBA字符串中,而不是直接添加到单元格中。不过,我可以稍微改变一下我的方法,以利用他的方法。如果你想使用字符串,请参阅更新的答案。似乎不太复杂?我接受这个答案,我认为这是我能想到的最好的方法+1对我使用的数据类型进行合理猜测