5

パターンの複数回の出現に一致できる C# 文字列検索アルゴリズムが必要です。たとえば、パターンが「AA」で文字列が「BAAABBB」の場合、正規表現は一致結果のインデックス = 1 を生成しますが、結果のインデックス = 1,2 が必要です。正規表現にそのような結果を強制することはできますか?

4

6 に答える 6

13

先読みパターンを使用する:-

「あ(?=あ)」

これにより、後続の A を消費することなく、別の A が後に続く任意の A が検出されます。したがって、AAA はこのパターンに 2 回一致します。

于 2009-01-08T10:26:54.590 に答える
4

以前のすべてのコメントを要約するには:

Dim rx As Regex = New Regex("(?=AA)")
Dim mc As MatchCollection = rx.Matches("BAAABBB")

これにより、要求している結果が生成されます。

編集:
これがC#バージョンです(今日はVB.NETで動作しているので、誤ってVB.NETを続行しました)。

Regex rx = new Regex("(?=AA)");
MatchCollection mc = rx.Matches("BAAABBB");
于 2009-01-08T10:52:45.503 に答える
0

たった2文字のサブストリングを本当に探していますか?その場合、使用する正規表現(または非正規表現の手法)に関係なく、2,000万文字の文字列の検索は遅くなります。検索文字列が長い場合、正規表現エンジンは、Boyer-MooreやKnuth-Morris-Prattなどの検索アルゴリズムを使用して検索を高速化できます。実際、長いほど優れています。

ちなみに、あなたが話している種類の検索は、重複一致と呼ばれます。それをタグに追加します。

于 2009-01-10T17:19:59.037 に答える
0

これを試して:

       System.Text.RegularExpressions.MatchCollection  matchCol;
       System.Text.RegularExpressions.Regex regX = new System.Text.RegularExpressions.Regex("(?=AA)");

        string index="",str="BAAABBB"; 
        matchCol = regX.Matches(str);
        foreach (System.Text.RegularExpressions.Match mat in matchCol)
            {
                index = index + mat.Index + ",";
            }                       

インデックスの内容は、最後のコンマを削除して探しているものです。

于 2009-01-08T11:33:01.990 に答える
0

任意の正規表現でMatchCollectionの配列を指定できます

于 2009-01-08T10:24:43.470 に答える
0

Regex.Matches() http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.matchcollection.aspx

于 2009-01-08T10:26:25.993 に答える