我正在使用C#,并且在其中一个地方我获得了所有人名的列表,其电子邮件ID为
name(email)\n
我刚从脑袋里拿出这个子串的东西。我正在寻找更优雅,更快速(在访问时间方面,它执行的操作),易于记住的代码行来做到这一点。
string pattern = "jackal(jackal@gmail.com)";
string email = pattern.SubString(pattern.indexOf("("),pattern.LastIndexOf(")") - pattern.indexOf("("));
//extra
string email = pattern.Split('(',')')[1];
我认为执行上述操作会对每个字符进行顺序访问,直到找到该字符的索引。现在工作正常,因为名字很短,但是当有一个大名字时会很困难(希望人们没有名字)
答案 0 :(得分:0)
一个肮脏的黑客就是让微软为你做这件事。
try
{
new MailAddress(input);
//valid
}
catch (Exception ex)
{
// invalid
}
我希望他们能比定制的注册表做得更好。
维护一个处理所有事情的自定义注册表可能需要付出一些努力。
参考:MailAddress
您的格式实际上非常接近某些支持的格式。 ()中的文本被视为注释,但如果用<和&替换为>并获得支持的格式。
答案 1 :(得分:0)
Substring()中的第二个参数是要采用的字符串的长度,而不是结束索引。
您的代码应为:
string pattern = "jackal(jackal@gmail.com)";
int start = pattern.IndexOf("(") + 1;
int end = pattern.LastIndexOf(")");
string email = pattern.Substring(start, end - start);
或者,请查看Regular Expression to find a string included between two characters while EXCLUDING the delimiters