Arrays vb.net数组,由逗号分隔的字符串组成

Arrays vb.net数组,由逗号分隔的字符串组成,arrays,vb.net,string,Arrays,Vb.net,String,我想从以空格(“”)和逗号分隔的字符串中获取字符串数组。有没有一个聪明的方法可以做到这一点 例如,如果字符串为: 猫狗长颈鹿“大象”蛇 我希望结果数组包含字符串 猫 狗 长颈鹿 大象 蛇 我知道我可以进行拆分(str,“”),但结果与我想要的不同。我从未使用过正则表达式,但我有一种预感,解决方案可能与此有关。将输入视为以空格分隔的CSV可以大大简化任务: Imports Microsoft.VisualBasic.FileIO.TextFieldParser ... Dim s As Strin

我想从以空格(“”)和逗号分隔的字符串中获取字符串数组。有没有一个聪明的方法可以做到这一点

例如,如果字符串为:

猫狗长颈鹿“大象”蛇

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

长颈鹿

大象


我知道我可以进行拆分(str,“”),但结果与我想要的不同。我从未使用过正则表达式,但我有一种预感,解决方案可能与此有关。

将输入视为以空格分隔的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;狗;长颈鹿;大象;snake


代码改编自。

您可以使用正则表达式:

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
正则表达式的工作原理如下:

  • 匹配\p{L}+,表示尽可能多的一个或多个字母
  • 或(由|表示)匹配“\p{L}+(?:\p{L}+*”详细说明:
    • 匹配报价
    • \p{L}+尽可能多地匹配一个或多个字母
    • (?:\p{L}+*表示不会导致捕获重复0次或更多次的组
      该组包含在一个空格中,后面尽可能多地跟一个或多个字母
    • 最后匹配收盘报价“”
然后我们只需
修剪
结果匹配,以消除潜在的起始/结束报价


注意:有关
\p{L}

的更多信息,请参阅。为什么不先将
.Replace()
替换为
.Split()
?这里的正则表达式太夸张了。替换什么,@Danielshillock?谢谢。好的。非英语文本呢?当输入åääääääääääääääääääääääää时,它会。在我们的语言中,z紧挨着s(…pqrszšžt…),甚至t、u等都被忽略:)@Sehnsucht有趣,谢谢你指出。unicode字母包括数字和标点符号吗?(如“大0-eléphant”案)