尾隨和超過1個空間我有字符串:去除前導,從字符串
Simple text with spaces
我需要的正則表達式,其選擇:
- 領先
- 尾隨
- 超過1個空間
例如:
_ - space
_Simple text __with ___spaces_
尾隨和超過1個空間我有字符串:去除前導,從字符串
Simple text with spaces
我需要的正則表達式,其選擇:
例如:
_ - space
_Simple text __with ___spaces_
下面將刪除所有的空格
NSString *spaces [email protected]"hi how are you ";
NSString *withoutSpace= [spaces stringByReplacingOccurrencesOfString:@" "
withString:@" "];
withoutSpace = [withoutSpace stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceCharacterSet]];
你可以保持正則表達式簡單的做前/後的部分作爲第二階段:
let singlySpaced = " Simple text with spaces "
.stringByReplacingOccurrencesOfString("\\s+", withString: " ", options: .RegularExpressionSearch)
.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
(假設你想剝去各種空白 - 你可以把它調整到只是簡單地做空格)
Ther e是比較複雜的正則表達式,它可以一次完成,但是我個人更喜歡兩步版本而不是混淆(並且@MartinR提到,兩者之間的性能非常相似,因爲trim是一個非常輕量級的操作,更復雜的正則表達式 - 所以它真的是你喜歡的外觀)。
也許可以使用stringByReplacingOccurrencesOfString方法。示例:let singlySpaced =「帶空格的簡單文本」.stringByReplacingOccurrencesOfString(「REGULAR EXPRESSION」,withString:「」,options:.RegularExpressionSearch)。 REGULAR EXPRESSION會選擇領先,尾隨和超過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)
已經提供了一些很好的答案,但如果你想有一個正則表達式下面應該工作:
^ |(?<=) +| $
的|
指示的替代品,^
是字符串的開始,$
表示字符串的結尾。所以這匹配字符串的開頭,後面跟着一個空格或一個或多個空格,後面是一個空格,或者是字符串末尾的一個空格。
Thx,位'+'表達式,選擇單詞之間的所有空格。我需要從發生的第二個空白開始選擇結束空白組。例如'word __word'。 –
你需要一個Look-behind斷言。改變了我的答案。 –
我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 = "^ +| +$| +(?=)"
YEEEEESSSS !!!! Works !! It's Alive !!!十分感謝! –
考慮到更復雜的正則表達式可能會更慢,請注意知道這是否優於各種可能字符串的兩步操作。 –
只需注意:正則表達式\ s'匹配空格,製表符,換行符或換頁符。如果你只想匹配空間我們的實際空間 –
請正確解釋問題。 –