在c#的正则表达式中使用转义字符和开头通配符

本文关键字:转义字符 开头 通配符 正则表达式 | 更新日期: 2023-09-27 18:04:06

下面是我从数据库中使用的一封电子邮件的示例:

2.2|[johnnyappleseed@example.com]

每一行都是不同的,它可能是也可能不是电子邮件,但它永远都是。我试图使用正则表达式来获取括号内的信息。下面是我一直在尝试使用的:

^'[']$
不幸的是,每次我尝试使用它时,表达式都不匹配。我认为问题是使用转义字符,但我不确定。如果这不是我如何使用转义字符,或者如果我完全错了,请让我知道实际的正则表达式应该是什么。

在c#的正则表达式中使用转义字符和开头通配符

接近你的是^.*'[(.*)']$:

  • ^起始行
  • .* anything
  • '[ a括号,表示邮件开始
  • (.*)任何(电子邮件),作为捕获组
  • '] a方括号,表示邮件结束
  • $行尾

请注意,您的Regex缺少.*部分,以匹配关键字符[和]之间的内容。

你的regex - ^'[']$ -匹配一个只包含[]的字符串/行,你需要在方括号之间的某个地方获得一个子字符串在一个更大的字符串。

可以使用

var rx = new Regex(@"(?<='[)[^]]+");
Console.WriteLine(rx.Match(s).Value);

参见regex demo

对于(?<='[),我们找到[之后的位置,然后我们将每个不是]的字符与[^]]+匹配。

另一种非正则表达式的方式:

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

参见IDEONE两种方法的演示