2

私はこのタイプのテキストを持っています:

string1_dog_bit_johny_bit_string2
string1_cat_bit_johny_bit_string2
string1_crocodile_bit_johny_bit_string2
string3_crocodile_bit_johny_bit_string4
string4_crocodile_bit_johny_bit_string5

string1 と string2 の間にのみ出現する「bit」をすべて見つけたいと考えています。正規表現でこれを行うにはどうすればよいですか?

Regex Match all characters between two stringsという質問を見つけましたが、そこの正規表現は string1 と string2 の間の文字列全体に一致しますが、その文字列の一部だけに一致させたいのです。

Notepad ++でグローバル置換を行っています。正規表現が必要なだけです。コードは機能しません。

前もって感謝します。

ローマン

4

4 に答える 4

0

私がここであなたが望むことをするためのコードを正しく理解していれば

            var intput = new List<string>
            {
                "string1_dog_bit_johny_bit_string2",
                "string1_cat_bit_johny_bit_string2",
                "string1_crocodile_bit_johny_bit_string2",
                "string3_crocodile_bit_johny_bit_string4",
                "string4_crocodile_bit_johny_bit_string5"
            };
        Regex regex = new Regex(@"(?<bitGroup>bit)");
        var allMatches = new List<string>();
        foreach (var str in intput)
        {
            if (str.StartsWith("string1") && str.EndsWith("string2"))
            {
                var matchCollection = regex.Matches(str);
                allMatches.AddRange(matchCollection.Cast<Match>().Select(match => match.Groups["bitGroup"].Value));
            }
        }


        Console.WriteLine("All matches {0}", allMatches.Count);
于 2013-10-09T13:25:32.853 に答える
0

次の正規表現を使用できます。

(?:string1|\G)(?:(?!string2).)*?\Kbit

regex101 デモ. notepad ++でも試してみましたが、うまくいきました。

デモサイトに説明がありますが、さらに説明が必要な場合はお知らせください。詳しく説明します。

于 2013-10-13T12:49:04.547 に答える