使用regex c#在字符之间获取字符串

时间:2018-03-12 15:43:37

标签: c# regex

Regex表达式应该从以下字符串中提取<>之间的字符串:

 "MyName"<myname@11.com>

如何使用正则表达式仅在c#中提取myname@11.com?我可以使用表达式MyName提取介于""之间的"""([^""]*)""",但我发现正则表达式非常混乱,所以似乎无法弄清楚如何在中间提取字符串{ {1}} :(

6 个答案:

答案 0 :(得分:2)

这是:

public static void Main(string[] args)
{
    string input = "<myname@11.com>";
    Regex rx = new Regex(@"<(.*?)>");

    Console.WriteLine(rx.Match(input).Groups[1].Value);
}

这个正则表达式包含几个部分: <>符号表示我的文字介于他们之间 () - 是群组声明,我们在此处看到Groups[1]。零组将包含带有<>符号的整行 .* - 任何长度的字符
? - 非贪婪搜索,因此,如果您有"<myname@11.com><asdasd>",它仍会返回正确的值而不会获得结果myname@11.com><asdasd

Example

答案 1 :(得分:2)

(?<=<).*(?=>)

肯定的后视(?<=<)一个<必须在前面

正向前(?=>)一个>必须是结束

.*任何角色都可以在中间

https://regex101.com/r/4ExLWp/1

答案 2 :(得分:1)

您可以轻松使用此正则表达式:

<(.*)>

你可以在网上试试: https://regex101.com/

如果每次都是&lt;&gt;中的电子邮件标签,您可以通过电子邮件正则表达式替换。*

[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+

答案 3 :(得分:1)

尝试使用^(?<namegroup>.*)(?<emailGroup>\<.*?\>)$

您可以在https://regex101.com/上测试任何正则表达式。 它很好地描述了究竟是什么意思,并且非常突出。

我使用的小组只是为了说清楚,没有必要给它们命名。 这是没有命名组的表达式:

^(.*)(\<.*?\>)$

在两个正则表达式中,您都可以获得&#34; MyName&#34;在第1组和包含&lt;&gt;的电子邮件中在第2组中。如果您需要不带&lt;&gt;的电子邮件,只需将它们移出括号

即可

答案 4 :(得分:1)

为什么要使用正则表达式。只需使用System.Net.Mail.MailAddress ...

var mailAddress = new MailAddress(@"""MyName""<myname@11.com>");
Console.WriteLine(mailAddress.Address); // prints myname@11.com

答案 5 :(得分:0)

public static void main(string[] args)
{
    string input = @"""MyName""<myname@11.com>";
    string regex = "<[^>]*>";

    Console.WriteLine(Regex.Match(input, regex).Value);
}

&#34;&lt;&#34;正在寻找那个角色,&#34; [^&gt;]&#34;正在寻找任何不是&#34;&gt;&#34;,&#34; *&#34;寻找前面的一个或多个,即&#34; [^&gt;]&#34;和&#34;&gt;&#34;寻找那个角色。它正在寻找&#34;&lt;&#34;那么一个或多个不是&#34;&gt;&#34;那么&#34;&gt;&#34;。我使用this website来学习正则表达式并测试出来。它向您显示捕获的内容,并有一个描述您的正则表达式的备忘单。