0

正規表現または同様のものを使用して、ドキュメント内の重複を削除するために検索しています。以下を削除します。

First Line

<Important text /><Important text />Other random words

の重複を削除し、<some text/>他のすべてをそのままにしておく必要があります。テキストは複数行にまたがる場合とそうでない場合があります。

いくつかの異なる単語を使用する必要がありますが、< > タグを使用してください。

編集:

どんな言葉になるかわかりません。< > タグ内にネストされるものもあれば、ネストされないものもあります。次のように、次々と繰り返されるすべての重複を削除する必要があります。

<text/><text/><words/><words/><words/>

出力は次のようになります。

<text/><words/>
4

4 に答える 4

1

この正規表現は、重複するタグを検索します。これ(<.+?\/>)(?=\1)は、それを証明する正規表現 101です。

于 2013-08-19T17:32:51.593 に答える
0

これを使用できます:

Regex.Replace(input, "(<Important text />)+", "<Important text />");

<Important text />これにより、1 回以上繰り返されるのインスタンスが の 1 つのインスタンスに置き換えられます<Important text />

またはもっと簡単に:

Regex.Replace(input, "(<Important text />)+", "$1");

例えば:

var input = "<Important text /><Important text />Other random words";
var output = Regex.Replace(input, "(<Important text />)+", "$1");

Console.WriteLine(output); // <Important text />Other random words

|このような複数のパターンを一度に処理したい場合は、処理したい各単語を指定する代替 ( ) と、\1繰り返しを見つけるための後方参照 ( ) を使用する必要があります。

Regex.Replace(input, @"(<(?:Important text|Other text) />)\1+", "$1");

例えば:

var input = "<text/><text/><words/><words/><words/>";
var output = Regex.Replace(input, @"(<(?:text|words)\s*/>)\1+", "$1");

Console.WriteLine(output); // <text/><words/>
于 2013-08-19T17:19:51.430 に答える
0

すべてのタグの辞書を作成する必要があります。つまり、括弧を含む < と /> の間のすべてのテキストとその数 (これは正規表現で行うことができます)。次に、重複を削除するか、それらを新しい文字列/データ構造に出力しないで、もう一度繰り返します。

于 2013-08-19T17:22:45.457 に答える
0

個人的には、タグ付きの正規表現は好きではありません。

各タグのテキストを分割し、重複を で削除しDistinct、結果を結合すれば完成です。

string input1 = "<Important text /><Important text />Other random words";
string input2 = "<text/><text/><words/><words/><words/>";

string result1 = RemoveDuplicateTags(input1); // "<Important text />Other random words"
string result2 = RemoveDuplicateTags(input2); // "<text/><words/>"

private string RemoveDuplicateTags(string input)
{
    IEnumerable<string> tagsOrRandomWords = input.Split('>');
    tagsOrRandomWords = tagsOrRandomWords.Distinct();

    return string.Join(">", tagsOrRandomWords);
}

または、読みにくいワンライナーを好む場合:

private string RemoveDuplicateTags(string input)
{
    return string.Join(">", input.Split('>').Distinct());
}
于 2013-08-19T17:35:49.307 に答える