2017-04-21 76 views
0

我遇到了replaceOccurrences函數的問題。我有一個字符串,像這樣:Swift 3替換髮生的確切

let x = "john, johnny, johnney" 

我需要做的僅僅是刪除「約翰」

所以我有這樣的代碼是什麼:

y = "john" 
x = x.replacingOccurrences(of: y, with: " ", options: NSString.CompareOptions.literal, range: nil) 

我得到的問題是,這將刪除約翰的所有實例...另外我想過設置範圍,但是,這不會真正解決我的問題,因爲名稱可能以不同的順序排列。

是否有一個CompareOptions的功能,我忽略了「確切」還是我需要創建一個正則表達式?

真誠,

丹尼斯·安格爾

回答

1

你應該使用一個正則表達式來匹配確切的單詞,你只需要把所需的單詞放在\b之間。試試這樣:

let x = "johnny, john, johnney" 
let y = "john" 
let z = x.replacingOccurrences(of: "\\b\(y)\\b", with: " ", options: .regularExpression) // "johnny, , johnney" 

let x = "johnny &john johnney" 
let y = "&john" 
let z = x.replacingOccurrences(of: y + "\\b", with: " ", options: .regularExpression) 
+0

如果x =「johnny john johney」,我該怎麼做? – Denis

+0

對不起,如果x =「johnny&john johnney」和y =「&john」 – Denis

+0

我在每個單詞前都有一個非字母。所以有些話有一個,有些不。另外,x有可能是「&johnny&john johnney。那麼有沒有辦法在我的regrex字符串中包含一個非字母 – Denis

0

正則表達式可能是你最好的選擇,因爲沒有一般規則「精確」,將適用於所有語言。在英語和大多數浪漫語言中,你可以將「精確」定義爲在替換單詞之前或之後沒有字母字符。

正則表達式可以相對簡單地表達英語,因爲沒有複雜的字母組合,並且a-z幾乎全是它。在其他語言中,您不得不擔心阿拉伯語中的變音符號(法語,其他拉丁語言),因此您需要考慮在某些單詞的開頭處合併的字母A(阿列夫),等等。

+0

感謝您的解釋!我在Python中使用正則表達式,但沒有意識到它可以在迅速。 – Denis