来自逗号分隔字符串的vb.net数组

时间:2016-12-02 11:58:49

标签: arrays vb.net string

我想从一个用空格(“”)和逗号分隔的String中获取一个String数组。有一个聪明的方法吗?

例如,如果字符串是:

  猫狗长颈鹿“大象”蛇

我希望结果数组包含字符串

  

     

     

长颈鹿

     

大象

     

我知道我可以做一个Split(str,“”),但结果会与我想要的不同。我从来没有使用过RegEx,但我有一种预感,解决方案可能与它有关。

2 个答案:

答案 0 :(得分:3)

将输入视为以空格分隔的CSV可以极大地简化任务:

Imports Microsoft.VisualBasic.FileIO.TextFieldParser
...
Dim s As String = "cat dog giraffe ""big elephant"" snake"
Dim afile As FileIO.TextFieldParser = New FileIO.TextFieldParser(New System.IO.StringReader(s))
Dim CurrentRecord As String()
afile.TextFieldType = FileIO.FieldType.Delimited
afile.Delimiters = New String() {" "}
afile.HasFieldsEnclosedInQuotes = True
Do While Not afile.EndOfData
    Try
        CurrentRecord = afile.ReadFields
        Console.WriteLine(String.Join("; ", CurrentRecord))
    Catch ex As FileIO.MalformedLineException
        Stop
    End Try
Loop

打印cat; dog; giraffe; big elephant; snake

代码改编自Parse Delimited CSV in .NET

答案 1 :(得分:0)

您可以使用正则表达式:

protected void DropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    //get the values from the dropdownlists
    decimal selectedValue1 = Convert.ToDecimal(DropDownList1.SelectedValue);
    decimal selectedValue2 = Convert.ToDecimal(DropDownList2.SelectedValue);

    //clear all listitems from dropdownlist3
    DropDownList3.Items.Clear();

    //add the listitems based on the selected values
    if (selectedValue1 > selectedValue2)
    {
        DropDownList3.Items.Insert(0, new ListItem("MET", "MET", true));
    }
    else if (selectedValue1 < selectedValue2)
    {
        DropDownList3.Items.Insert(0, new ListItem("Breached", "Breached", true));
    }
    else
    {
        DropDownList3.Items.Insert(0, new ListItem("Threatened", "Threatened", true));
    }
}

正则表达式的工作原理如下:

  • 匹配 \ p {L} + ,这意味着尽可能多地写一个或多个字母
  • (由 | 表示)匹配“\ p {L} +(?:\ p {L} +)*”详细说明:
    • 匹配报价
    • \ p {L} + 尽可能匹配一个或多个字母
    • (?: \ p {L} +)* 表示不会导致捕获重复次数为零或更多次的组 该组包含一个空格,后跟一个或多个字母尽可能
    • 最后匹配结束语

然后我们只需要Const data = "åäöÄ åäöÄ ""åäöÄ åäöÄ"" åäöÄ" Dim matches = Regex.Matches (data, "\p{L}+|""\p{L}+(?: \p{L}+)*""") For Each m As Match in matches Console.WriteLine (m.Value.Trim("""")) Next 得到的匹配就可以消除潜在的startind / end quote

注意:有关Trim

的更多信息,请参阅here