1

昨日の私の質問と同様: C#正規表現パターンの難問

同じ問題、異なる正規表現パターン。正規表現パターンは、 http: //sourceforge.net/projects/regextester/およびhttp://www.RegexLib.comでテストすると、目的の一致を返します。 ただし、パターンを.NETで実行すると、一致は返されません。

string SampleText = @"\r\n99. Sample text paragraph one.\r\n100. Sample text here paragraph two.\r\n101. Sample text paragraph three.\r\n";
string RegexPattern = @"(?<=\\r\\n\d+\.\s)([^.]+?)here.*?(?=\\r\\n)";
Regex FindRegex = new Regex(@RegexPattern, RegexOptions.Multiline | RegexOptions.Singleline);
Match m = FindRegex.Match(SampleText);

必要な一致は「サンプルテキストここの段落2」です。

昨日と同じように、問題が私の正規表現パターンなのかコードなのかはわかりません。

4

2 に答える 2

7

特殊な正規表現もエスケープする必要があります。

string RegexPattern = @"(?<=\\r\\n\d+\.\s)([^.]+?)here.*?(?=\\r\\n)";

または:

string RegexPattern = "(?<=\\\\r\\\\n\\d+\\.\\s)([^.]+?)here.*?(?=\\\\r\\\\n)";

忘れないでください - あなたは C# 文字列コンテキストにいるので、正しい文字列を正規表現エンジンに渡す必要があります。

于 2013-03-08T15:51:08.333 に答える
0

私はそれを考え出した。

RegexTester と RegexLib.com でテストするとき、コントロール リターン ライン フィードをテキスト表現 \r\n に変換するイミディエイト ウィンドウからソース テキストをコピー アンド ペーストしました。

したがって、私の正規表現はテスト環境で機能しました。しかし、実際の実行時、ソース テキストにはテキストとしての \r\n ではなく、コントロール リターン ライン フィードが含まれていました。これは、私のパターンがテスト環境では機能したが、実行時には機能しなかった理由を説明しています。

パターンをに変更したところ、@"(?<=\n\d+\.\s)([^.]+?)here.*?(?=\n)"美しく機能しました。

恥ずかしい気づき。ご協力ありがとうございます。

于 2013-03-08T16:13:14.177 に答える