0

まず、スペル/文法のエラーが発生する可能性があることをお詫び申し上げます。複雑な正規表現の問題を解決しようとしていますが、その方法がわかりません。特定の文字列の一部を除外しようとしています。ただし、これは機能します。オプションの行が 1 行あり、それが 2 行目の電子メールです。この部分がオプションであり、文字列に存在するかどうかのみを検索する必要があることを正規表現に伝えるにはどうすればよいですか。

ストリングス

  • [コメント]ニャー[/127.0.0.1]
  • [コメント]影[/127.0.0.1]
  • [コメント] [メール] フォクシー[/127.0.0.1]
  • [コメント] [email2] PerfectAim[/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
}

メールセクションをオプションにする方法を知っている人はいますか? (正規表現ではオプションなので、文字列にない場合は何もしません。メール部分をスキップするだけです。私の下手な英語で申し訳ありません> :)。

4

1 に答える 1

0

グループを使用しています...

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");
}
于 2013-10-04T00:37:21.313 に答える