C#:如何有效地从预定义的字符串格式中提取值?

fun*_*ing 1 .net c#

我收集了类似的字符串

例如:字符串1:客户的第一个名字是john,他的姓氏是glueck,他的公司名称是abc def technolgies llc,他的余额为60美元.他的支出率是+ 3.45%

字符串2:客户的第一个名字是史蒂夫,他的姓氏是约翰斯顿,他的公司名称是xyz公司,他的余额为800美元.他的支出率是-212.86%

现在我必须从字符串2中提取像john,glueck,abc def technolgies llc,60,+ 3.45和字符串2中的steve,johnston,xyz corporation,800,-212.86这样的值.

在我们的生产环境中,每个字符串都非常大,我有大约83个字段可以从每个字符串中提取.提取这些值的最佳方法是什么?

是否有任何方法与string.format相反,它接受引用字符串和实际字符串并返回提取的值?

Dan*_*ner 11

正则表达式可以解决这个问题.

namespace ConsoleApplication
{
    using System;
    using System.Text.RegularExpressions;

    internal static class Program
    {
        private static void Main()
        {
            var expression = new Regex(
                @"Customer's first Name is (?<FirstName>[^,]+), " +
                @"his last name is (?<LastName>[^,]+), " +
                @"his company name is (?<CompanyName>[^,]+), " +
                @"he has a balance of (?<Balance>[0-9]+) dollars\. " +
                @"His spending rate is (?<SpendingRate>[^%]+)%");

            var line = @"Customer's first Name is john, his last name is glueck, his company name is abc def technolgies llc, he has a balance of 60 dollars. His spending rate is +3.45%";

            var match = expression.Match(line);

            Console.WriteLine("First name......{0}", match.Groups["FirstName"]);
            Console.WriteLine("Last name.......{0}", match.Groups["LastName"]);
            Console.WriteLine("Balance.........{0}", match.Groups["Balance"]);
            Console.WriteLine("Spending rate...{0}", match.Groups["SpendingRate"]);

            Console.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

First name......john
Last name.......glueck
Balance.........60
Spending rate...+3.45
Run Code Online (Sandbox Code Playgroud)

之后,您可以执行一些简单的字符串解析以从字符串中获取数值.此外,如果输入格式存在一些变化,您可能必须编写更强大的正则表达式.