繁体   English   中英

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

[英]How can I parse out this string from a longer string?

我有一个字符串进来

 FirstName LastLast (WorkerId)

因此,例如:

"Joe Thompson (234DerX)"

我想把这个解析为这个人对象

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

解析工作人员ID和名称的最佳方法是什么? 正则表达式? 更简单的东西。 有些名称具有中间名或多个名字,所以我唯一可以依靠的是工作程序ID被“(” +“)”包围

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

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

Name存储在捕获组nameWorkerId存储在捕获组id

假定工作程序ID位于最后一对括号中。

即使名称出于某种原因包含括号,该解决方案也应该起作用(例如John (The Third) (JK4532R) )。 但是,如果输入中缺少工作人员ID并且名称的末尾带有括号,则无法区分名称和工作人员ID(例如John (The Third)

正如您在您的帖子中提到的那样, 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;
 }

你可以这样做:

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

如果我理解正确,那么您可以按一定的间隔简单地分割字符串,然后取出最后得到的字符串,从括号的前后进行修剪,您将获得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;

如果这么简单,我认为正则表达式就算太过分了...

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

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

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

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

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

    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(")", "");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM