2014-11-03 62 views
2

我需要檢查包含電子郵件列表的字符串。這些電子郵件通常以逗號分隔,但我需要檢查該列表中是否有逗號以外的分隔符。下面是一個例子:在C中的字符串中拆分子串#

[email protected],[email protected],[email protected]#[email protected] 

我需要識別不同的字符並替換爲逗號。

我不能只用正則表達式來識別除逗號以外的特殊字符,並替換它們,因爲電子郵件可能有一些這些字符。所以我需要找到兩封電子郵件之間的東西。 我做了如下正則表達式來一封電子郵件,我相信它會覆蓋大部分的電子郵件:

^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@[a-z0-9]+(\.[a-z0-9]+)+$ 

但我對如何用它來解決我的問題有點失落,使用C# 。我需要捕獲這個正則表達式的兩個匹配之間的東西,並替換爲逗號。

任何人都可以幫助我嗎? 謝謝。

+4

你是什麼意思?這是一個隨機角色嗎?我猜想它不應該在那裏。 如果是隨機的,請檢查所有有效字符,並用逗號替換無效字符。 如果不是:'emails.Replace('#',',')':p – joppiesaus 2014-11-03 15:22:16

+0

爲什麼不僅匹配有效的電子郵件地址並過濾掉其餘的郵件地址。 – 2014-11-03 15:22:45

+7

如果分隔符可能是電子郵件中名稱的任何有效字符,則說明存在嚴重問題 – dariogriffo 2014-11-03 15:23:11

回答

0

我想不出一種優雅的方式來實現這一點。如果您不介意使用不雅的解決方案,則可以用相同的頂級域名加逗號代替any top level domain加一個字符。

你會落得 「.COM#」 替換爲 「.COM 」「 .eu域名*」 代替帶有 「.eu域名,」 等等。可以使用Regex進行替換,因此您的迭代將與要替換的TLD數量相同。你可以嘗試

+0

那麼多級域名呢? – 2014-11-03 15:38:20

+2

由於'.co'也是一個域名,你最終也會用'.co,'替換'.com',並且你還將用'user.com @ server.net.com'替換.com,server.net,com' – Rotem 2014-11-03 15:40:18

0

一種選擇是使用@符號拆分進入的字符串,並檢查結果數組的每個部分有INT逗號 - 除了第一個和最後。

如果你找到一個缺少逗號做的.com或.net或.org在元素和字符後堅持一個逗號的搜索。

最後只是運行以@符號

+1

那麼.com.eu呢? – 2014-11-03 15:39:03

7

你的問題是無法解決的,因爲分隔符不能總是由決定一起回來拼接列表。

考慮此輸入其中分隔符爲.

[email protected]@otherServer.com 

是這樣的:

[email protected] | [email protected] 

或者是:

[email protected] | [email protected] 

或者此輸入:

[email protected]@otherServer.com 

它是分隔符u

[email protected] | [email protected] 

或者分隔符t

[email protected] | [email protected] 

如果你不願意接受失敗的一定比例,你最好關閉尋找方式不接受這個輸入開始。

0

感謝您的回覆。

該字符串必須只有逗號作爲分隔符。

我剛纔提到的例子只是爲了說明,因爲這個列表是使用jquery插件生成的,該插件有一個漏洞,只有在允許將其保存在列表中後纔會被發現,例如「email1 @ email.comemail2 @ email」。 com「或任何其他非標準組合」email1 @ email.com,email2 @ email.com「。

我最關心的是像「EMAIL1 @ email.com/EMAIL2 @ email.com」

我試圖自動爲這種不一致的搜索,預防案件。

我想過使用正則表達式,但我真的不知道它是否是最好的方法。 我現在在想,因爲它不是系統的重要組成部分,只是使用無效字符列表進行替換將是一個更簡單的方法。

但我會嘗試vks的解決方案。

謝謝大家。

+0

未來,請編輯您的問題來介紹更新,而不是發佈答案。 – Rotem 2014-11-03 16:24:26