簡體   English   中英

構建正則表達式,如何刪除多余的換行符?

[英]Building a regex, how to remove redundant line breaks?

我有這樣的字符串

"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 ),以防萬一。

通常,您的代碼應為:

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

檢查這個小提琴。

但是,根據您的案例/問題中的那些字符abc ,...,您可能需要將\\\\S更改為其他類,例如[^ ] ,然后將\\\\s更改為[ ] ,如果您還想將\\ r\\ n也包含在內,請>>

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

檢查這個小提琴。

但是,如果a要表示字符串\\ r \\ n ,那么您將需要更復雜的模式>>

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

檢查這個小提琴。

如果我正確理解問題,則目標是刪除特定字符/字符串的重復副本,可能用空格分隔。 您可以通過將正則表達式(a\\s*)+替換a ;來實現。 +多個連續拷貝, a\\s*a秒,然后用空格怎么正是你做到這一點取決於語言:在Perl是$str =~ s/(a\\s*)+/a /g ,在Ruby中它的str.gsub(/(a\\s*)+/, "a ")等。

a實際上是\\r\\n的事實不應該使事情復雜化,但可能意味着,替換為s/(\\r\\n[ \\t]*)+/\\r\\n/g更好(因為\\s\\r\\n重疊。

如果您需要C#代碼,並且想用開頭和結尾的空格折疊\\ r \\ n字符串,則解決方案非常簡單:

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

在此處檢查此代碼。

與此:

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;
}

正如它應該做的那樣,它會忽略所有換行符,除非匹配三個或更多連續換行符的情況(忽略空格),然后用\\n\\n替換那些匹配項。

試試這個:

Regex.Replace(inputString, @"(\r\n\s+)", " ");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM