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”案)