字符串拆分为两个单引号

时间:2014-09-08 08:17:53

标签: .net regex vb.net string split

我有一个简单的字符串,其中每个单词用两个单引号之间的逗号分隔。

Dim str As String = "a','b','c','d','e"

我想使用','拆分字符串,以便我有一个数组如下:

["a", "b", "c", "d", "e"]

我的代码如下:

str.Split("','")

返回的数组是["a", ",", "b", ",", "c", ",", "d", ",", "e"]

我没想到这种行为,我正在寻找关于如何分割字符串的解释。

4 个答案:

答案 0 :(得分:3)

您不需要正则表达式,您可以使用Split(","c)并使用'删除所有String.Trim

Dim result = str.Split(","c).Select(Function(s) s.Trim("'"c)).ToArray()

结果:a,b,c,d,e

附注:Option StrictOff 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语法可能是粗略的。

结果:

Image from LinqPad

答案 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