2015-05-21 69 views
3

尾隨和超過1個空間我有字符串:去除前導,從字符串

Simple text with spaces 

我需要的正則表達式,其選擇:

  • 領先
  • 尾隨
  • 超過1個空間

例如:

_ - space 

_Simple text __with ___spaces_ 
+0

請正確解釋問題。 –

回答

0

下面將刪除所有的空格

NSString *spaces [email protected]"hi how are you "; 

NSString *withoutSpace= [spaces stringByReplacingOccurrencesOfString:@" " 
           withString:@" "]; 
withoutSpace = [withoutSpace stringByTrimmingCharactersInSet: 
           [NSCharacterSet whitespaceCharacterSet]]; 
+0

這將消除所有空間,但我相信他想留下一些空間。看起來他想在單詞之間留下1個空格。 – ColGraff

+0

對不起,請檢查更新的答案...他想刪除,拖尾,領先和多個,這將做同樣的 –

+0

是的,這將做到這一點!另一件事是問題中列出的語言是Swift,你的代碼是Objective-C。不難轉換,但它仍然是不匹配的。 – ColGraff

2

你可以保持正則表達式簡單的做前/後的部分作爲第二階段:

let singlySpaced = " Simple text with spaces " 
     .stringByReplacingOccurrencesOfString("\\s+", withString: " ", options: .RegularExpressionSearch) 
     .stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 

(假設你想剝去各種空白 - 你可以把它調整到只是簡單地做空格)

Ther e是比較複雜的正則表達式,它可以一次完成,但是我個人更喜歡兩步版本而不是混淆(並且@MartinR提到,兩者之間的性能非常相似,因爲trim是一個非常輕量級的操作,更復雜的正則表達式 - 所以它真的是你喜歡的外觀)。

+0

也許可以使用stringByReplacingOccurrencesOfString方法。示例:let singlySpaced =「帶空格的簡單文本」.stringByReplacingOccurrencesOfString(「REGULAR EXPRESSION」,withString:「」,options:.RegularExpressionSearch)。 REGULAR EXPRESSION會選擇領先,尾隨和超過1個空間?附:我需要保存執行時間。 –

+0

很容易一次匹配前導/尾隨/多個事物(正如羅伯特的答案所示)與'^ | + | $'。棘手的部分是如果你想剝離,要替換它 - 你想要替換前/後沒有任何東西,但用一個空格替換多個內部空間。 –

1

這應該清理你的串了起來:

var string : NSString = " hello world. " 
while string.rangeOfString(" ").location != NSNotFound { //note the use of two spaces 
    string = string.stringByReplacingOccurrencesOfString(" ", withString: " ") 
} 
println(string) 
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet()) 
println(string) 
1

已經提供了一些很好的答案,但如果你想有一個正則表達式下面應該工作:

^ |(?<=) +| $

|指示的替代品,^是字符串的開始,$表示字符串的結尾。所以這匹配字符串的開頭,後面跟着一個空格或一個或多個空格,後面是一個空格,或者是字符串末尾的一個空格。

+0

Thx,位​​'+'表達式,選擇單詞之間的所有空格。我需要從發生的第二個空白開始選擇結束空白組。例如'word __word'。 –

+0

你需要一個Look-behind斷言。改變了我的答案。 –

4

我2CT:

let text = " Simple text with spaces " 
let pattern = "^\\s+|\\s+$|\\s+(?=\\s)" 
let trimmed = text.stringByReplacingOccurrencesOfString(pattern, withString: "", options: .RegularExpressionSearch) 
println(">\(trimmed)<") // >Simple text with spaces< 

^\s+\s+$匹配一個或字符串的開始/結束的多個空格。

棘手的部分是\s+(?=\s)圖案,它匹配的一個或多個 空格字符後跟另一個空白字符其本身是不考慮匹配(一個「超前斷言」)的 一部分。

通常,\s匹配所有空白字符,如空格字符本身,水平製表,換行,回車,換行或換頁。如果 您只想刪除(重複)空格字符,則將其替換爲

let pattern = "^ +| +$| +(?=)" 
+0

YEEEEESSSS !!!! Works !! It's Alive !!!十分感謝! –

+0

考慮到更復雜的正則表達式可能會更慢,請注意知道這是否優於各種可能字符串的兩步操作。 –

+0

只需注意:正則表達式\ s'匹配空格,製表符,換行符或換頁符。如果你只想匹配空間我們的實際空間 –