假设我有这样的类定义(相当简单):
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字符串的格式很奇怪。
我正在考虑逐行阅读并解析其内容,但我喜欢学习一种更好的方法。至少两个大脑比一个大脑强。
发布于 2012-06-01 02:58:18
如果字符串总是这种格式,那么您应该能够拆分一个":“字符并将其索引到数组中。
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]
};
}发布于 2012-06-01 04:21:03
可以使用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,则可能需要调整正则表达式
正则表达式方法非常灵活,因为即使属性的顺序或空格的数量发生变化,它也能正常工作。
https://stackoverflow.com/questions/10839556
复制相似问题