1

ウィキペディアの API を介して受け取ったウィキテキスト ファイルを解析しようとしていますが、問題はそのテンプレートの一部 (つまり、{{ と }} で囲まれたスニペット) が自動的にウィキテキストに展開されないことです。そのため、記事内でそれらを手動で探す必要があります。ソースを作成し、最終的にそれらを置き換えます。問題は、.NET で正規表現を使用してテキストから一致を取得できるかどうかです。

自分自身をより明確にするために、私が何を意味するかを説明する例を次に示します。

文字列の場合

{{ abc {{...}} def {{.....}} gh }}

単一の一致、つまり文字列全体、つまり可能な限り長い一致が存在する必要があります。

一方、この例のような「孤立した」ブレースの場合:

{{ abc {{...}}

結果は単一の一致になるはずです: {{...}}

誰か私に提案をしてもらえますか? 前もって感謝します。

4

4 に答える 4

3

バランシング グループ定義を使用して、.NET 正規表現でこれを行うことができます。

<ドキュメントに示されている例は、ネスト可能なおよびでどのように機能するかを示しています>{{区切り文字をおよびに簡単に適合させることができます}}{必要に応じて、単一および}「テキスト」内で許可するようにさらに調整できます。

{}は正規表現のメタ文字であることを覚えておいてください。\{文字どおりに一致させるには、 andにエスケープできます\}

于 2010-10-14T11:19:28.743 に答える
1

正規表現でそれをしないでください。文字列を左から右に移動し、{{ に遭遇した場合はその位置をスタックにプッシュし、}} で前の {{ の位置をスタックからポップして長さを計算します。次に、これらの長さの最大値を簡単に取得できます。

于 2010-10-14T11:14:39.410 に答える
0

あなたはこれを間違ったレベルで見ていると思います。ハックな正規表現の回避策の代わりに、MediaWiki API にテンプレートを展開するよう依頼してみませんか? 展開するコンテンツを渡すことができます。

http://www.mediawiki.org/wiki/API:Parsing_wikitext#expandtemplates

または、次のように指定して、コンテンツ内のテンプレートをダウンロードするときに事前に展開するように依頼することをお勧めしますrvexpandtemplates

http://www.mediawiki.org/wiki/API:Query_-_Properties#revisions

于 2010-11-07T23:32:40.340 に答える
0

この正規表現パターンは、言及したパターンの任意の数に一致します。

\{\{(?:[^{]+\{\{[^}]+\}\})+[^}]+\}\}

2 番目のリクエストでは、別の正規表現が必要になります。

\{\{.*?\}\}
于 2010-10-14T11:22:18.440 に答える