C# - 拆分字符串的问题

时间:2009-09-21 11:34:47

标签: c# string split

我有一组基于我分割字符串

的值
string[] seperator = new string[9];
        seperator[0] = "*";  //is the client
        seperator[1] = "/";  //is the name of company
        seperator[2] = "(";     //name of the market    
        seperator[5] = ":";    //ID
        seperator[6] = "?";    //orderType
        seperator[3] = "!@";   //realtive Time
        seperator[4] = "!+";   //
        seperator[7] = "+";    //quantity
        seperator[8] = "@";//price
string[] result = values.Split(seperator, StringSplitOptions.None);

例如:输入字符串是 !* A / AB(M @ 12:?!6 SIMPLE + 5 + 2

OUTPUT
    [0]: ""
    [1]: "A"
    [2]: "AB"
    [3]: "M"
    [4]: "12"
    [5]: "6"
    [6]: "SIMPLE"
    [7]: "5"
    [8]: "2"

例如:输入字符串是 !* A(M @ 12 SIMPLE + 5 + 2 / AB:?!6

OUTPUT:
    [0]: ""
    [1]: "A"
    [2]: "M"
    [3]: "12"
    [4]: "SIMPLE"
    [5]: "5"
    [6]: "2"
    [7]: "AB"
    [8]: "6"

我面临的问题是:我怎么能说A是客户,AB是公司......等等

作为用户输入此信息的顺序RANDOM ... 如果他没有输入这些值中的任何一个,它会改变结果长度吗?

3 个答案:

答案 0 :(得分:5)

如何使用一个或多个带有命名捕获组的正则表达式并按名称索引匹配?

检查例如this msdn pagethis post

这是一个让你入门的例子:

using System;
using System.Text.RegularExpressions;

class Program {
    static void Main(string[] args) {

        Regex regex = new Regex(@"(?:\*(?<client>\w+))|(?:/(?<company>\w+))",RegexOptions.Compiled);
        string input = "*A/AB(M!@12:6?SIMPLE!+5+2";

        foreach (Match match in regex.Matches (input)) {
            if (match.Groups["client"].Success) {
                Console.WriteLine("Client = {0}", match.Groups["client"].Value);
            } else if (match.Groups["company"].Success) {
                Console.WriteLine("Company = {0}", match.Groups["company"].Value);
            }
        }


    }
}

我知道正则表达式的语法起初似乎很难理解,但是只要你需要进行这种文本操作,它们就是一个非常强大的工具。

此外,还有一些工具可让您体验并帮助您编写正则表达式,例如ExpressoThe Regulator

答案 1 :(得分:3)

如何在输入字符串上执行大量替换以使其更易于管理。例如。

inputString = inputString.Replace("*", ",Client=").Replace("/", ",Company=");

然后你可以拆分“,”并获得带有标题的字符串列表,然后将它们拆分为“=”以获得标题和值。

答案 2 :(得分:1)

使用类似的东西

SortedList<int, string> list = new SortedList<int, string>();
            string[] seperator = new string[9];
            seperator[0] = "*";  //is the client
            seperator[1] = "/";  //is the name of company
            seperator[2] = "(";     //name of the market    
            seperator[5] = ":";    //ID
            seperator[6] = "?";    //orderType
            seperator[3] = "!@";   //realtive Time
            seperator[4] = "!+";   //
            seperator[7] = "+";    //quantity
            seperator[8] = "@";//price
            string val = "*A/AB(M!@12:6?SIMPLE!+5+2";

            for (int iSep = 0; iSep < seperator.Length; iSep++)
                list.Add(val.IndexOf(seperator[iSep]), val);

将按照用​​户输入的任何顺序为您提供分隔符开始的位置列表,然后您可以使用子字符串来检索值