C# 在c中的正则表达式中使用带开头通配符的转义字符#
下面是我从数据库中使用的电子邮件示例:C# 在c中的正则表达式中使用带开头通配符的转义字符#,c#,regex,C#,Regex,下面是我从数据库中使用的电子邮件示例: 2.2|[johnnyappleseed@example.com] 每一行都是不同的,它可能是电子邮件,也可能不是,但它永远都是。我试图使用正则表达式来获取括号内的信息。以下是我一直尝试使用的内容: ^\[\]$ 不幸的是,每次我尝试使用它时,表达式都不匹配。我认为问题在于使用转义字符,但我不确定。如果这不是我使用转义字符的方式,或者如果我完全错了,请让我知道实际的正则表达式应该是什么。您的正则表达式-^\[\]$-与仅包含[]的单个字符串/行匹配,你
2.2|[johnnyappleseed@example.com]
每一行都是不同的,它可能是电子邮件,也可能不是,但它永远都是。我试图使用正则表达式来获取括号内的信息。以下是我一直尝试使用的内容:
^\[\]$
不幸的是,每次我尝试使用它时,表达式都不匹配。我认为问题在于使用转义字符,但我不确定。如果这不是我使用转义字符的方式,或者如果我完全错了,请让我知道实际的正则表达式应该是什么。您的正则表达式-
^\[\]$
-与仅包含[]
的单个字符串/行匹配,你需要在一个更大的字符串中的方括号中获得一个子字符串
你可以用
var rx = new Regex(@"(?<=\[)[^]]+");
Console.WriteLine(rx.Match(s).Value);
请参见靠近您的is
^.*\[(.*)\]$
:
行的开头^
任何东西*
一个括号,表示电子邮件的开头\[
任何东西(电子邮件),作为捕获组(*)
方括号,表示电子邮件的结尾\]
行尾$
请注意,您的正则表达式缺少与关键字符[和]之间的内容相匹配的
*
部分。该表达式匹配行首,紧跟着一个[
,紧跟着一个]
,紧跟着行尾。听起来像是和你的琴弦相配吗?
var s = "2.2|[johnnyappleseed@example.com]";
var ss = s.Split('|');
if (ss.GetLength(0) > 1)
{
var last = ss[ss.GetLength(0)-1];
if (last.Contains("[") && last.Contains("@")) // We assume there is an email
Console.WriteLine(last.Trim(new[] {'[', ']'}));
}