Regex
表达式应该从以下字符串中提取<>
之间的字符串:
"MyName"<myname@11.com>
如何使用正则表达式仅在c#中提取myname@11.com
?我可以使用表达式MyName
提取介于""
之间的"""([^""]*)"""
,但我发现正则表达式非常混乱,所以似乎无法弄清楚如何在中间提取字符串{ {1}} :(
答案 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
答案 1 :(得分:2)
答案 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来学习正则表达式并测试出来。它向您显示捕获的内容,并有一个描述您的正则表达式的备忘单。