0

私はテキストを持っています

1
00:00:03,837 --> 00:00:07,170
Text1

2
00:00:08,875 --> 00:00:10,968
Tex2

3
00:00:11,010 --> 00:00:13,843
Text3

そして、私はそれをそのようにしたい

00:00:03,837 --> 00:00:07,170
Text1

00:00:08,875 --> 00:00:10,968
Tex2

00:00:11,010 --> 00:00:13,843
Text3

私はこれを試しました:

Match match = Regex.Match(loadedText, @"\d{1,4}\r\n");

if (match.Success)
{
    for (int i = 0; i < match.Groups.Count; i++)
    {
        loadedText= loadedText.Replace(match.Groups[i].Value, "");
    }
    rtbLoaded.Text = loadedText;
}

Buそれは私にこの結果を与えます:

00:00:03,837 --> 00:00:07,170
Text1

2
00:00:08,875 --> 00:00:10,968
Tex2

3
00:00:11,010 --> 00:00:13,843
Text3

だからそれは一度だけです...私が間違っていることは何ですか?

4

2 に答える 2

1

グループは ()正規表現の一部であり、個々の一致ではありません。

したがって、正規表現(abc)(def)では、最初のグループは、、 abc2番目のグループはdefです。

グループを反復処理しないでください(デフォルトのグループしかありません!)。複数回一致させる必要があります。Replaceたぶん、そこで行っているこのハックの代わりに、組み込みの置換方法を使用してください。

于 2012-12-20T18:09:28.527 に答える
1

この置換ルールを試してください:

string result = Regex.Replace(originalString, @"(?<=(\r\n|^))(\d+\r\n)", "");

これにより、すべての行が数字のみに置き換えられるか、最初の行の行が数字に置き換えられます。

入力例を参照してください。

string input = "1\r\n00:00:03,837 --> 00:00:07,170\r\nText1\r\n\r\n2\r\n00:00:08,875 --> 00:00:10,968\r\nTex2\r\n\r\n3\r\n00:00:11,010 --> 00:00:13,843\r\nText3\r\n\r\n";
Console.WriteLine(Regex.Replace(input, @"(?<=(\r\n|^))(\d+\r\n)", ""));

これは以下を出力します:

00:00:03,837-> 00:00:07,170
Text1

00:00:08,875-> 00:00:10,968
Tex2

00:00:11,010-> 00:00:13,843
テキスト3

于 2012-12-20T18:09:47.020 に答える