我收集了类似的字符串
例如:字符串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)
之后,您可以执行一些简单的字符串解析以从字符串中获取数值.此外,如果输入格式存在一些变化,您可能必须编写更强大的正则表达式.