繁体   English   中英

C# 高级 String.Split

[英]C# advanced String.Split

我有一个类似于这个的字符串:

男孩对妈妈说:“我可以吃点糖果吗?”

如果我对其进行普通的String.Split ,我会得到:

{ 'The', 'boy', 'said', 'to', 'his', 'mother', '"Can', 'I', 'have', 'some', 'candy?"' }

我想要一个像这样的数组:

{ 'The', 'boy', 'said', 'to', 'his', 'mother', 'Can I have some candy?' }

显然,我可以逐个字符循环并跟踪我是否在字符串中以及所有这些......但是有更好的方法吗? 也许使用正则表达式?

如何查找此正则表达式的所有匹配项:

"[^"]*"|\S+

取决于你的要求。 例如,您需要将 AAA"BBB(无空格)视为单字还是两个字?如果 AAA"BBB 是单个字,并且 " 仅在分隔符后开始一个带引号的字段 - 这看起来像 CSV 解析器。当然,CSV还有其他规则,例如双引号表示文字引号等 - 但您也需要定义一些类似的规则。

因此,您可以调整任何开源 CSV 解析器,或者查看例如 Microsoft.VisualBasic.FileIO.TextFieldParser 是否适合您

        string msg = "The boy said to his mother, \"Can I have some candy?\"";
        System.IO.MemoryStream s = new System.IO.MemoryStream(Encoding.Unicode.GetBytes(msg));
        TextFieldParser p = new TextFieldParser(s, Encoding.Unicode);
        p.Delimiters = new string[] { " ", "," };
        foreach(var f in p.ReadFields().Where(f => f != ""))
            Console.WriteLine(f);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM