我有一组基于我分割字符串
的值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 ... 如果他没有输入这些值中的任何一个,它会改变结果长度吗?
答案 0 :(得分:5)
如何使用一个或多个带有命名捕获组的正则表达式并按名称索引匹配?
检查例如this msdn page或this 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);
}
}
}
}
我知道正则表达式的语法起初似乎很难理解,但是只要你需要进行这种文本操作,它们就是一个非常强大的工具。
此外,还有一些工具可让您体验并帮助您编写正则表达式,例如Expresso和The 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);
将按照用户输入的任何顺序为您提供分隔符开始的位置列表,然后您可以使用子字符串来检索值