如何从较长的字符串中解析出这个字符串?

时间:2014-03-05 11:15:32

标签: c# regex string

我有一个字符串

 FirstName LastLast (WorkerId)

所以例如:

"Joe Thompson (234DerX)"

我希望将其解析为此人物对象

 class Person
 {
      public string Name;  //Joe Thompson
      public string WorkerId;  //234DerX
 }

解析worker Id和Name的最佳方法是什么。正则表达式?更简单的事情。有些名字有middles名字或多个名字,所以我唯一可以依赖的是worker ID被“(”+“)”

包围

7 个答案:

答案 0 :(得分:7)

如果您使用正则表达式,以下正则表达式应该执行您想要的操作:

@" *(?<name>.*) \((?<id>.*)\)"

Name存储在捕获组name中,WorkerId存储在捕获组id中。

这假设工人ID在最后一对括号中。

即使名称由于某种原因包含括号(例如John (The Third) (JK4532R)),解决方案也应该有效。但是,如果输入中缺少工作者ID,并且名称末尾有括号内的某些内容(例如John (The Third)

,它将无法区分名称和工作人员ID。

答案 1 :(得分:5)

正如你在帖子only thing i can rely on is that the worker id is surrounded by "(" + ")"中提到的那样,我会建议这个解决方案:

 class Person
 {
      public Person(string str)
      {
          int pos = str.LastIndexOf('(');
          Name = str.Substring(0, pos - 1);
          WorkerId = str.Substring(pos + 1).TrimEnd(')');
      }

      public string Name;
      public string WorkerId;
 }

答案 2 :(得分:3)

你可以这样做:

var splitted = "Joe Thompson (234DerX)".Split(" ".ToCharArray(),
    StringSplitOptions.RemoveEmptyEntries);
var id = splitted.Last();
var name = string.Join(" ", splitted.Take(splitted.Count() - 1));

它会将最后一部分解析为Id,并将之前的所有部分解析为Name。您可以从Trim(

) ID

答案 3 :(得分:1)

如果我理解正确,那么你可以简单地按时间间隔分割字符串,然后取出最后得到的字符串,从前面和后面的括号中修剪它,你将获得id。 至于名称,因为你不确切知道有多少名字,如果你只想把它们中的一些放在字符串中会更难。如果您只需要名字的第一个和姓氏中的最后一个,那么只需要从分割得到的数组中的第一个和倒数第二个字符串。

这样的事情:

var splitArray = "Joe Thompson (234DerX)".Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries);
var id = splitArray.Last().Trim(new char['(',')']);
var name = splitArray[0] + " " + splitArray[splitArray.Length - 2];

var person = new Person();
person.Id = id;

person.Name = name;

答案 4 :(得分:0)

如果它如此简单,我认为正则表达式是一种矫枉过正的行为......

int idStart = personStr.IndexOf('(');
int idEnd = personStr.IndexOf(')');
Name = personStr.SubString(0, idStart);
WorkerId = personStr.SubString(idStart + 1, idEnd - idStart);

当然,您必须验证peronStr的格式是否正确。

答案 5 :(得分:0)

您可以像这样使用Split方法: -

var split = yourString.Split(new char[] {"("});

请阅读MSDN文档。有关拆分内存分配影响的更多信息。 MSDN Split documentaion

答案 6 :(得分:0)

    string hld = "Joe Thompson (234DerX)";

    char[] separator = new char[] { '(' };
    string[] strSplitArr;


    strSplitArr = hld.Split(separator);

    string Name = strSplitArr[0].ToString();
    string WorkerId = strSplitArr[1].ToString().Replace(")", "");