2

一致を削除したり、他のテキストに置き換えたりすることなく、正規表現一致が最後に出現する前にすべてのテキストを削除しようとしています。以下は、解析中のファイルのサンプル行の一部です。

N3.C2.R1: 19 00000000 00000000 00**0000 00000000 00000000 00000000 00000000
N0.C0.R0N3.C3.R1: 19 00000000 00000000 00000000 00000000 00000000 00000000 00000000
.N3.C3.R0: 18 00000000 00000000 00000000 00000000 00000*00 00000000 00000000
ランク 1 への書き込み...N3.C1.R3: -22 0000000* 00000000 00000000 00000000 00000*00 00000000 00000000

最初の行は理想的な行であり、リターンがどうあるべきかに一致します。私の正規表現パターンは次のとおりです。

string pattern = @"N\d\.C\d\.R\d:";  

このパターンは上記のすべての文字列を返しますが、最初の行のように見える行を返すために、パターンが最後に出現する前に発生するすべてのテキストをトリミングする必要があります。ここで類似した多くの質問を見てきましたが、コードで実際に機能する、または私にとって意味のある答えを見つけることができませんでした。

上記の例は、すべての可能性を網羅したリストではないことに注意してください。これが、文字列メソッドの代わりに正規表現を使用しようとしている理由です。

参考までに、これを尋ねる前に読んだ同様の質問を次に示します。


正規表現 + 一致する前のすべてのテキストを削除します正規表現 テキスト内の複数の一致 正規表現
: 最後の出現前のテキストを除外します

編集: 私が作業している行は、元のファイルに含まれる情報の非常に小さなサブセットであることを指摘しておく必要があります。私が投稿したサンプル行はすべて「良い」情報 (つまり、私が使用できる情報) の例ですが、最初の行は最終的な出力がどのように見えるかです。

4

2 に答える 2

2

以下を試してください:

string str = Regex.Replace(input, @"(.+?)(N\d\.C\d\.R\d:)", "$2");
于 2013-02-13T16:35:44.957 に答える
0

このアプローチは、最後の一致に続く可能性のあるものも返します (たとえば、番号の後の行の残り):

string pattern = @"^N\d\.C\d\.R\d:";
var matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
if (matches.Count > 0) {
    string result = input.Substring(matches[matches.Count - 1].Index);
}

^行頭を明示的に検索するためにも含めました。これにはMultiline正規表現オプションが必要です。

于 2013-02-13T17:02:13.203 に答える