Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中的正则表达式中使用带开头通配符的转义字符#_C#_Regex - Fatal编程技术网

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[] {'[', ']'}));
}