如何将含特殊字符的VB.NET字符串正确分割为数组
解决VB.NET中带转义单引号和内部逗号的字符串转数组问题
你的问题核心是字符串中的逗号分为两种:元素分隔用的逗号(单引号外)和元素内部的逗号(单引号内),直接全局替换单引号再分割会混淆这两种逗号,同时丢失转义的单引号。下面提供两种可靠的实现方式:
方法一:正则表达式匹配(推荐,通用性强)
利用正则匹配所有被单引号包裹的元素内容,再对每个元素处理转义的双单引号:
Imports System.Text.RegularExpressions Dim MyString As String = "'O''Neil, Bill','Dave, John','NYC'" Dim matches As MatchCollection = Regex.Matches(MyString, "'(.*?)'", RegexOptions.Singleline) Dim MyArray As New List(Of String)() For Each m As Match In matches ' 将元素内的''替换为',并加入列表 MyArray.Add(m.Groups(1).Value.Replace("''", "'")) Next ' 转成数组(如果需要) Dim resultArray() As String = MyArray.ToArray()
效果验证:
resultArray(0)=O'Neil, BillresultArray(1)=Dave, JohnresultArray(2)=NYC
正则表达式'(.*?)'的作用是匹配被单引号包裹的任意内容(非贪婪模式,避免跨元素匹配),Groups(1)取到单引号内部的内容,再替换''为'即可还原转义的单引号。
方法二:临时分隔符替换法(适合简单场景)
如果能确保原字符串中不存在某个特殊字符(比如|),可以先替换元素分隔用的','为临时字符,再处理转义单引号,最后分割:
Dim MyString As String = "'O''Neil, Bill','Dave, John','NYC'" ' 第一步:替换元素分隔符','为| Dim tempStr As String = MyString.Replace("','", "|") ' 第二步:去掉首尾的单引号 tempStr = tempStr.Trim("'"c) ' 第三步:替换转义的''为' tempStr = tempStr.Replace("''", "'") ' 第四步:按|分割成数组 Dim MyArray() As String = tempStr.Split("|"c)
这种方法逻辑简单,但局限性是必须保证临时字符|不在原字符串的元素内容中,否则会出错。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

