[英]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");
檢查這個小提琴。
但是,根據您的案例/問題中的那些字符a , b , c ,...,您可能需要將\\\\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.