编辑:哇,感谢您提出这么多建议,但我希望有一个专门针对未来,更复杂使用的正则表达式解决方案。
我需要支持在VBA Excel中拆分文本字符串。我环顾四周,但解决方案要么是针对其他语言,要么是我无法在VBA中使用。
我想只用单斜线拆分单词:
text1/text2- split
text1//text2- no split
text1/text2//text3 - split after text1
我尝试使用regexp.split函数,但不认为它在VBA中有效。谈到模式,我在思考如下:
(?i)(?:(?<!\/)\/(?!\/))
但在我的宏中执行搜索时我也会遇到错误,因为它适用于以下网站:https://www.myregextester.com/index.php#sourcetab
答案 0 :(得分:3)
您可以使用RegExp匹配方法而不是拆分方法。您需要匹配/
或双//
以外的任何字符才能获取所需的值。
这是一个&#34;包裹&#34; (即交替)版本的正则表达式:
(?:[^/]|//)+
这是demo
这里效率更高,但可读性更低:
[^/]+(?://[^/]*)*
请参阅another demo
这是一个有效的VBA代码:
Sub GetMatches(ByRef str As String, ByRef coll As collection)
Dim rExp As Object, rMatch As Object
Set rExp = CreateObject("vbscript.regexp")
With rExp
.Global = True
.pattern = "(?:[^/]|//)+"
End With
Set rMatch = rExp.Execute(str)
If rMatch.Count > 0 Then
For Each r_item In rMatch
coll.Add r_item.Value
Debug.Print r_item.Value
Next r_item
End If
Debug.Print ""
End Sub
按如下方式调用sub:
Dim matches As New collection
Set matches = New collection
GetMatches str:="text1/text2", coll:=matches
以下是3个字符串的结果:
1. text1/text2
text1
text2
2. text1/text2//text3
text1
text2//text3
3. text1//text2
text1//text2
答案 1 :(得分:1)
Public Sub customSplit()
Dim v As Variant
v = Split("text1/text2//text3", "/")
v = Replace(Join(v, ","), ",,", "//")
Debug.Print v '-> "text1,text2//text3"
End Sub
或
Replace(Replace("text1/text2//text3", "/", ","), ",,", "//") '-> "text1,text2//text3"
答案 2 :(得分:0)
转到“数据”选项卡,然后转到“文本到列”选项。稍后,选择“Delimited”选项,然后选择“other”并输入您想要的任何分隔符。
答案 3 :(得分:0)
文本到列将起作用。如果要保留原始值,另一个选项是使用公式: 在B1
=left(a1,find(":",a1)-1)
C1中的
=mid(a1,find(":",a1)+1,len(a1))