2014-04-17 51 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];