正则表达式,仅当当前字符串中存在时才匹配

本文关键字:存在 字符串 正则表达式 | 更新日期: 2023-09-27 18:34:01

首先,对于可能发生的任何拼写/语法错误,我们深表歉意。我正在尝试解决一些复杂的正则表达式问题,但我似乎无法弄清楚如何解决。我正在尝试过滤掉某些字符串的某些部分。但是,这有效!有一行是可选的,这是第二行,即电子邮件。我如何告诉正则表达式这部分是可选的,应该只搜索它是否存在于字符串中。

字符串

  • [评论] 喵喵[/127.0.0.1]
  • [注释] 阴影[/127.0.0.1]
  • [评论] [电子邮件] 狐狸[/127.0.0.1]
  • [评论] [电子邮件2] 完美目标[/127.0.0.1]

我尝试过什么

Regex regexUserCommented = new Regex(
    @"('[COMMENT'])' " +  // COMMENT
    @"('[.*']) " +        // Email, this needs to be optional but how?!
    @"('w(?<!'d)['w'-]*)" // User
);
if (regexUserCommented.IsMatch(test))
{
    var infoMatches = regexUserCommented.Split(test);
    Console.WriteLine(infoMatches[3]); // User
}

有人知道我如何将电子邮件部分设置为可选吗?(在正则表达式中是可选的,因此如果它不在字符串中,它不会执行任何操作,它只是跳过电子邮件部分,对不起我的英语>:)不好。

正则表达式,仅当当前字符串中存在时才匹配

使用组...

Regex regexUserCommented = new Regex(
    @"('[COMMENT'])' " +  // COMMENT
    @"(('[.*']) )?" +        // Email, this needs to be optional but how?!
    @"('w(?<!'d)['w'-]*)" // User
);
var match = regexUserCommented.Match(test);
if (match.Groups.Count == 5)
{
    Console.WriteLine("==> {0}", match.Groups[4].Value);
}
else
{
    Console.WriteLine("==> Not matched");
}