2012-07-29 184 views
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" s是換行符(\r\n),以防萬一。

+1

你在用什麼語言? – 2012-07-29 16:50:55

+0

哎呀,更新了這個問題。 'C#',謝謝。 – bevacqua 2012-07-29 17:00:28

+0

爲什麼這會降低投票率? – bevacqua 2012-07-29 17:16:58

回答

0

去與此:

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取代那些比賽。

1

一般來說你的代碼應該是:

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

檢查this小提琴。

但是,要看是什麼這些字符一個bç,...代表你的情況/問題,您可能需要更改\\S到其他類,如[^ ],然後\\s[ ],如果要包括\ r\ n到被倒塌以及>>

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

檢查this小提琴。

但是,如果一個是要代表字符串\ r \ n,那麼你就需要一些更復雜的模式>>

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

檢查this小提琴。

+0

當OP的問題沒有** C#**標籤,只是** html **和** regex **,所以我帶** javascript **解決方案來發布我的回覆。正則表達式模式對C#來說是一樣的,所以你應該能夠輕鬆地克隆它... – 2012-07-29 17:09:59

+0

對於OP:C#regex比JS正則表達式更強大。你可以避開字符串轉義序列,並在C#中輸入一個文字字符串。 – nhahtdh 2012-07-29 17:12:41

+0

@nhahtdh - 隨時編輯我的答案。 – 2012-07-29 17:13:39

0

如果我正確理解問題,目標是刪除特定字符/字符串的重複副本,可能由空格分隔。你可以通過用替換正則表達式(a\s*)+來實現; +多個連續副本,a\s*a s後跟空格你的確切程度取決於語言:在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重疊)。

-1

試試這個:

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

Ria,你的代碼會刪除每個'\ r \ n',這不是OP所要求的! – 2012-07-29 17:30:07

0

如果你需要的C#代碼,並要摺疊JUST \ r \ n,其中前導和尾部空格的字符串,則該解決方案很簡單:

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

檢查此密碼here

+0

我也想刪除相鄰的'\ r \ n's並用一個'\ r \ n'代替它們。 – bevacqua 2012-07-29 17:31:41

+0

@Nice - 這就是**正好**上面的代碼正在做什麼,對嗎?你應該知道'\ r'和'\ n'也是空白字符...... – 2012-07-29 17:33:46

相關問題