0

私はこのような文字列を持っています

"a           a            a  a aaa b c d e f a g a aaa  aa           a       a"

どちらかに変えたい

"a b c d e f a g a"

また

"a                        b c d e f a g a                   "

(どちらが簡単でもHTMLなので問題ありません)

"a"\r\n何かを変更する場合に備えて、改行 ( ) です。

4

5 に答える 5

1

通常、コードは次のようになります。

s.replace(new RegExp("(\\S)(?:\\s*\\1)+","g"), "$1"); 

このフィドルを確認してください。

ただし、これらの文字abc 、... がケース/質問で何を表しているかによって、 \r\nを含めたい場合は、、\\Sなどの他のクラスに変更する必要がある場合があります。同様に崩壊している>>[^ ]\\s[ ]

s.replace(new RegExp("([^ ])(?:[ ]*\\1)+","g"), "$1");

このフィドルを確認してください。

ただし、aが文字列\r\nを表す場合は、もう少し複雑なパターンが必要になります >>

s.replace(new RegExp("(\\r\\n|\\S)(?:[^\\S\\r\\n]*\\1)+","g"), "$1");

このフィドルを確認してください。

于 2012-07-29T16:52:13.847 に答える
1

これで行きました:

private string GetDescriptionFor(HtmlDocument document)
{
    string description = CrawlUsingMetadata(XPath.ResourceDescription, document);
    Regex regex = new Regex(@"(\r\n(?:[ ])*|\n(?:[ ])*){3,}", RegexOptions.Multiline | RegexOptions.IgnoreCase);//(?:[^\S\r\n|\n]*\1)+

    string result = regex.Replace(description, "\n\n");
    string decoded = HttpUtility.HtmlDecode(result);
    return decoded;
}

想定どおり、空白を無視して 3 つ以上の連続する改行に一致する場合を除き、すべての改行を無視し、それらの一致を に置き換え\n\nます。

于 2012-07-29T18:40:04.930 に答える
0

問題を正しく理解している場合、目標は、特定の文字/文字列の重複コピーを削除することです。スペースで区切られている可能性があります。正規表現(a\s*)+;に置き換えることでそれを行うことができます。+複数の連続コピーの場合a\s*as の後にスペースが続く場合 どのくらい正確に行うかは、言語によって異なります。Perl では$str =~ s/(a\s*)+/a /g、 R​​ubystr.gsub(/(a\s*)+/, "a ")では などです。

であるという事実aは、実際には物事を複雑にする\r\n べきではありませんs/(\r\n[ \t]*)+/\r\n/gが、 ( および と重複するため)\sとして置換がより適切に機能することを意味する可能性があります。\r\n

于 2012-07-29T16:54:35.797 に答える
0

C# コードが必要で、先頭と末尾の空白で \r\n 文字列のみを折りたたむ場合、解決策は非常に簡単です

string result = Regex.Replace(input, @"\s*\r\n\s*", "\r\n");

このコードはこちらで確認してください。

于 2012-07-29T17:28:33.000 に答える
-1

これを試してください:

Regex.Replace(inputString, @"(\r\n\s+)", " ");
于 2012-07-29T17:27:28.500 に答える