让我说我有这样的类定义(相当简单):
class Person
{
public string Balance;
public string Escrow;
public string Acc;
// .. and more
}
我需要将此字符串解析为上面的类:
BALANCE: 746.67 ESCROW PAYMENT: 271.22 LAST ACT:05/03/12
ACC: 10 YTD DIVIDENDS: .27 ENTRY DATE:12/20/10
字符串以这种奇怪的格式出现。
我正在考虑逐一阅读每一行并解析其内容,但我想学习更好的方法。至少2个大脑比一个大脑强。
答案 0 :(得分:1)
如果字符串始终采用该格式,那么您应该能够将“:”字符拆分为数组并将其编入索引。
public Person ParsePerson(string line1, string line2)
{
string[] fields1 = line1.Split(new char[] {':', ' '}, StringSplitOptions.RemoveEmptyEntries);
string[] fields2 = line2.Split(new char[] {':', ' '}, StringSplitOptions.RemoveEmptyEntries);
return new Person() {
Balance = fields1[1],
Escrow = fields1[3],
Acc = fields1[1]
};
}
答案 1 :(得分:1)
您可以使用regular expression从源字符串中提取每个属性的值,如下所示:
using System.Text.RegularExpressions;
...
Regex balanceRegex = new Regex("(?<=BALANCE:\\s*)[^\\s]+");
string balance = balanceRegex.Match(source).Value;
这可以包含在函数中以搜索任何命名属性,如下所示:
private static string GetProperty(string source, string propertyName)
{
string pattern = String.Format("(?<={0}:\\s*)[^\\s]+", propertyName);
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
return regex.Match(source).Value;
}
然后你可以像这样填充一个Person对象:
Person person = new Person
{
Balance = GetProperty(source, "Balance"),
Escrow = GetProperty(source, "Escrow Payment"),
Acc = GetProperty(source, "Acc")
};
您可能需要调整正则表达式,例如,如果您的 属性值为空格,例如ACCOUNT NAME: MR SMITH
正则表达式方法非常灵活,因为即使属性的顺序或空白量发生变化,它也会起作用。