[英]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
存储在捕获组name
而WorkerId
存储在捕获组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.