正则表达式删除前导和后角支架

时间:2015-10-09 09:31:28

标签: c# .net regex

使用C#,我需要检查字符串(电子邮件地址)以查看它们是否有前导和尾部括号,如果是,请将其删除,保留电子邮件地址字符串。

e.g。

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

我应该也应该迎合前导角支架前面或后角支架后面可能有空白区域的情况。

处理这种替换会有什么好的正则表达式吗?

5 个答案:

答案 0 :(得分:5)

为什么你需要使用正则表达式?

你可以这样做:

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

当然,如果你真的需要确定没有空格,或者可能有多个空格:

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

答案 1 :(得分:2)

你应该使用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*$", "");

答案 2 :(得分:1)

虽然TrimStart / TrimEnd / Trim为您提供了一个很好的选项,可以在没有正则表达式的情况下完成任务,但是如果您想在两侧<周围留出空格,必须执行四次调用才能完成。

Regex允许您在一次通话中完成此操作。这是一个可能的表达方式:

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

它有^\s*<?\s*来匹配开头可选空格所包围的可选<,最后匹配类似匹配\s*>?\s*$

中间部分是捕获组 ([^\s>]+)以匹配电子邮件地址本身,而不对其执行任何验证。

现在您只需要将捕获的中间“粘贴”到替换中,如下所示:

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

Demo.

答案 3 :(得分:0)

您可以全局使用以下正则表达式:

env GOPATH="${HOME}/fakegopath/src/" GO15VENDOREXPERIMENT="1" go build .

说明:

  • \<(.*?)\> :&lt;是一个元字符,如果你想匹配它需要转义 字面上。
  • \<:以非贪婪的方式匹配所有内容并捕获它。
  • (.*?):&gt;是一个元字符,如果你想匹配它需要转义 字面上。

答案 4 :(得分:0)

如果你只需要这么多,你就可以这样做String.Replace()

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