我有一个字符串
FirstName LastLast (WorkerId)
所以例如:
"Joe Thompson (234DerX)"
我希望将其解析为此人物对象
class Person
{
public string Name; //Joe Thompson
public string WorkerId; //234DerX
}
解析worker Id和Name的最佳方法是什么。正则表达式?更简单的事情。有些名字有middles名字或多个名字,所以我唯一可以依赖的是worker ID被“(”+“)”
包围答案 0 :(得分:7)
如果您使用正则表达式,以下正则表达式应该执行您想要的操作:
@" *(?<name>.*) \((?<id>.*)\)"
Name
存储在捕获组name
中,WorkerId
存储在捕获组id
中。
这假设工人ID在最后一对括号中。
即使名称由于某种原因包含括号(例如John (The Third) (JK4532R)
),解决方案也应该有效。但是,如果输入中缺少工作者ID,并且名称末尾有括号内的某些内容(例如John (The Third)
)
答案 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(")", "");