首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种将字符串解析为键值对的简单方法

一种将字符串解析为键值对的简单方法
EN

Stack Overflow用户
提问于 2012-06-01 02:54:58
回答 2查看 2K关注 0票数 0

假设我有这样的类定义(相当简单):

代码语言:javascript
复制
class Person
{
  public string Balance;
  public string Escrow;
  public string Acc;
  // .. and more 

}

我需要将这个字符串解析到上面的类中:

代码语言:javascript
复制
BALANCE:      746.67     ESCROW PAYMENT:      271.22     LAST ACT:05/03/12
ACC: 10                   YTD DIVIDENDS:          .27   ENTRY DATE:12/20/10

字符串的格式很奇怪。

我正在考虑逐行阅读并解析其内容,但我喜欢学习一种更好的方法。至少两个大脑比一个大脑强。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-01 02:58:18

如果字符串总是这种格式,那么您应该能够拆分一个":“字符并将其索引到数组中。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-06-01 04:21:03

可以使用regular expression从源字符串中提取每个属性的值,如下所示:

代码语言:javascript
复制
using System.Text.RegularExpressions;
...
Regex balanceRegex = new Regex("(?<=BALANCE:\\s*)[^\\s]+");
string balance = balanceRegex.Match(source).Value;

这可以封装在一个函数中,用于搜索任何命名属性,如下所示:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
Person person = new Person
{
    Balance = GetProperty(source, "Balance"),
    Escrow = GetProperty(source, "Escrow Payment"),
    Acc = GetProperty(source, "Acc")
};

例如,如果属性值中有空格,例如ACCOUNT NAME: MR SMITH,则可能需要调整正则表达式

正则表达式方法非常灵活,因为即使属性的顺序或空格的数量发生变化,它也能正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10839556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档