簡體   English   中英

刪除前導和尾隨角括號的正則表達式

[英]Regular Expression to remove leading and trailing Angle Brackets

使用 C#,我需要檢查字符串(電子郵件地址)以查看它們是否有前導和尾隨尖括號,如果有,則刪除它們,使電子郵件地址字符串保持不變。

例如

<john@johnsmith.com> becomes john@johnsmith.com

我可能還應該考慮到前角括號前面或后角括號后面可能有空白的情況。

處理這個替換的合適的正則表達式是什么?

為什么需要為此使用正則表達式?

你可以簡單地這樣做:

string email = "<john@johnsmith.org>";
email = email.TrimStart('<').TrimEnd('>');

當然,如果您真的需要確保沒有空格,或者可能有多個空格:

string email = "<john@johnsmith.org>";
email = email.Trim().TrimStart('<').TrimEnd('>');

您應該使用 Russ Clarke 解決方案(我認為這是最好的)。

但是如果你真的需要一個正則表達式......

var email = "<john@johnsmith.com>";
email = Regex.Replace(email, "^<|>$", "");

澄清:

^< - match start < sign
| - or
>$ - match end > sign

允許空格的擴展版本( \\s*捕獲空格):

email = Regex.Replace(email, @"^\s*<\s*|\s*>\s*$", "");

盡管TrimStart / TrimEnd / Trim為您提供了一個不錯的選擇來完成任務而無需正則表達式,但如果您希望在兩側<周圍留有空格,則必須執行四次調用才能做到這一點。

正則表達式可讓您在一次調用中完成。 這是一種可能的表達方式:

@"^\s*<?\s*([^\s>]+)\s*>?\s*$"

它有^\\s*<?\\s*以匹配開頭由可選空格包圍的可選< ,而\\s*>?\\s*$用於匹配末尾的類似匹配。

中間部分是一個捕獲組([^\\s>]+)以匹配電子郵件地址本身,而不對其進行任何驗證。

您現在所需要做的就是將捕獲的中間“粘貼”到替換中,如下所示:

var res = Regex.Replace(s, @"^\s*<?\s*([^\s>]+)\s*>?\s*$", "$1")

演示。

您可以全局使用以下正則表達式:

\<(.*?)\>

解釋:

  • \\< : < 是一個元字符,如果您想按字面意思匹配它,則需要對其進行轉義。
  • (.*?) :以非貪婪的方式匹配所有內容並捕獲它。
  • \\> : > 是一個元字符,如果您想按字面意思匹配它,則需要對其進行轉義。

如果你只需要這么多,你可以像這樣做一個String.Replace()

var email = " <someone@example.com>";
email = email.Trim().Replace("<", "").Replace(">", "");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM