-2

テキストはこのパターンに従います

<tr class="text" (any sequence of characters here, except ABC)ABC(any sequence of characters here, except ABC)
<tr class="text" (any sequence of characters here, except ABC)ABC(any sequence of characters here, except ABC)
<tr class="text" (any sequence of characters here, except ABC)ABC(any sequence of characters here, except ABC)
<tr class="text" (any sequence of characters here, except ABC)ABC(any sequence of characters here, except ABC)

したがって、基本的に上記の行(改行を含む場合があります)は複数回繰り返される可能性があり、ABCの直後の最初の3文字を取得するという考え方です。

の線に沿って正規表現を試しました

 \<tr class="text" [.\n]+ABC(?<capture>[.]{3})

しかし、それらはすべて失敗します。誰かが私にヒントを与えることができますか?

4

3 に答える 3

1

ワイルドカードを効果的にエスケープして、文字通りのピリオドになります。使用するだけ

\<tr class="text" .+?ABC(?<capture>.{3})

必ず、を使用してくださいRegexOptions.Singleline。これにより、.改行も一致します。

ただし、実際には正規表現を使用しないでください。代わりに、DOMパーサーを使用してください。HTMLAgilityPackが.NETに定期的に推奨されているのを見てきました。

于 2012-11-21T23:00:18.917 に答える
0
<tr class="text" .+ABC(?<capture>.{3})

(改行RegexOptions.Singlelineに一致するように)と組み合わせて使用​​します。.

于 2012-11-21T23:04:13.073 に答える
0

"ABC"これは、文字列内のいくつかの後の最初の 3 文字をキャプチャする正規表現です。

".+ABC(...)"

C# では、マッチにはグループのコレクションがあり、それらのグループの 1 つが 3 文字になります

"ABC"文字列に予期しない s が含まれていないことを確認してください。

このコード

public static void Main()
{
    Regex regex = new Regex(".+ABC(...)");

    Match match = regex.Match("baln390nABCqlcln");
    foreach (Group group in match.Groups)
    {
        Console.WriteLine(group.Value);
    }
}

この出力を与える

baln390nABCqlc
qlc
Press any key to continue . . .
于 2012-11-21T23:03:29.673 に答える