2014-04-17 28 views
-1

在我的数据库的MySQL的表,我存储这个字符串例如:C#分割字符串的邮件

[email protected] 

我需要spli此字符串C#该输出

NAME SURNAME 

而且试过这个解决方案:

string[] emails = strEMail_user.ToString().Split('.'); 
string newUserName = emails[0].ToUpper().ToString() + " " 
        + emails[1].ToUpper().ToString(); 

但我在输出过这种错误字符串:

NAME [email protected] 
+0

你能找到@符号的索引和子串休息了。 – mmeasor

+0

您是否尝试将第二部分分成'@'字符并取第一部分? – Gnial0id

+2

虽然你可以用'@'拆分,然后用'。'拆分前半部分,但是你的所有名字是否适合以这种方式拆分。即它们必然都是“给定名称”点“家族名称”? – ClickRick

回答

1

可能这样做使用string.Split调用的组合,但使用Regex类来做到这一点会更加方便。

你的正则表达式应该是这个样子:

([a-zA-Z]*)\.([a-zA-Z]*)@thedomain\.com

然后,您可以使用Regex.Match方法从匹配组获得的值。

+1

注意:您可能需要对正则表达式进行一些修改,以解释名称中的其他字符(例如,双管姓氏)。 – AlexC

+0

如果域名部分发生变化,该怎么办? – Andrew

+0

@Andrew:我从这个问题假设领域是恒定的,并且事先知道(例如,内部员工数据库或类似的东西)。然而,我认为如果这不是适应正则表达式案件。 – AlexC

1

使用strEMail_user.ToString().Split('@')[0]为电子邮件的第一部分,其中存储的名字和姓氏。然后,您可以按照.来拆分,以便像您一样获取姓名和姓氏,如果这是您的电子邮件的模式。

+1

问题依然存在,在所有情况下,对于将在该数据库中表示的所有文化来说,这是否合适。 – ClickRick

+0

电子邮件只能包含一个'@'字符,拆分名称和域名部分,所以在这里使用'正则表达式'相当于在连接字符串中开销 – Andrew

+0

(因为您使用的是mysql)添加以下设置:'....; CharSet = utf8;' – Andrew

1

您正在拆分.字符上的字符串[email protected]。这会给你以下几部分:

name 
[email protected] 
com 

请记住,在你的字符串的结尾.com。你想要做的是拆分电子邮件地址的开头。尝试在@符号第一剖开整个电子邮件地址返回以下几部分:

name.surname 
thedomain.com 

现在你可以在.字符分割的第一块让你的名字和姓氏。

请注意,这完全假定您的所有电子邮件地址都是这种形式,并且忽略了名/姓的文化差异。

2

如果这是你的模式[email protected]那么你可以只使用Split有两个分隔符,并获得第一和第二部分:

var parts = "[email protected]".Split('.', '@'); 

string name = parts[0]; 

string surname = parts[1];