我有一个简单的字符串,其中每个单词用两个单引号之间的逗号分隔。
Dim str As String = "a','b','c','d','e"
我想使用','
拆分字符串,以便我有一个数组如下:
["a", "b", "c", "d", "e"]
我的代码如下:
str.Split("','")
返回的数组是["a", ",", "b", ",", "c", ",", "d", ",", "e"]
。
我没想到这种行为,我正在寻找关于如何分割字符串的解释。
答案 0 :(得分:3)
您不需要正则表达式,您可以使用Split(","c)
并使用'
删除所有String.Trim
:
Dim result = str.Split(","c).Select(Function(s) s.Trim("'"c)).ToArray()
结果:a,b,c,d,e
附注:Option Strict
至Off
Split("','")
仅按第一个字符分割,而不是整个子字符串分割。如果您需要,则需要使用String.Split
的重载。
例如(请注意{"','"}
是string()
):
str.Split({"','"}, StringSplitOptions.None)
使用Option Strict On
甚至没有编译,这是一件好事,因为没有过载。因此,我建议默认情况下将Option Strict
设置为On
。通过修复编译器错误,您将学习很多关于框架和.NET类型的知识。您还将学习以这种方式编写更强大的代码。
答案 1 :(得分:3)
意外结果的原因是您将String作为参数传递给Split
。
没有Split
的这种重载接受String,因为你有Option Strict off,编译器使用Split(Char)
重载,只取字符串中的第一个字符。所以在你的情况下
String.Split("','")
与
相同String.Split("'")
你想切换Option Strict On,那么你的代码就不会编译(这是一件好事,因为它避免了这样的错误)。
要实现你想要的,你必须将一个字符串数组传递给方法(在这种情况下是一个只包含一个字符串的数组):
Dim input As String = "a','b','c','d','e"
Dim splitChars() As String = {"','"}
Dim output As String() = input.Split(splitChars, StringSplitOptions.None)
答案 2 :(得分:2)
你可以在没有正则表达式的情况下完成。试试这个:
Dim str As String = "a','b','c','d','e" 'note that ',c was changed to ','c
Dim seperator() As String = New String() {"','"}
Dim result() As String = str.Split(seperator, StringSplitOptions.RemoveEmptyEntries)
我用c#尝试了这个代码:
string source = "a','b','c','d','e";
var seperator = new string[] {"','"};
var result = source.Split(seperator, StringSplitOptions.RemoveEmptyEntries);
然后通过http://www.developerfusion.com/tools/convert/csharp-to-vb/转换它,因此vb.net语法可能是粗略的。
结果:
答案 3 :(得分:0)
工作得很好,试试吧......
Note: Imports System.Text.RegularExpressions
Public Shared Function SplitStr(ByVal List As String) As String
Dim col As MatchCollection = Regex.Matches(List, "'(.*?)'")
Dim newList As String = ""
For Each m As Match In col
Dim g As Group = m.Groups(1)
If newList = "" Then
newList = g.Value
Else
newList += "," & g.Value
End If
Next
Return newList
End Function