2017-10-29 38 views
0

我目前有一個很長的文字,數字,單詞,符號(即「,?,;,:,', - ,+等)。從文本中去掉了所有的數字和符號,所以我完全有隻字的文本面對很多邊緣案件,同時消毒Swift中的長文本

我的期望是(忽略語義在下面的例子):

(BEFORE Sanitization) John's pet (Parson) is sleeping in a car: a BMW. 

(AFTER Sanitization) John s pet Parson is sleeping in a car a BMW 

這裏是我的企圖代碼:

static func splitText(text: String) -> [String] { 
    let lowerCasedString = text.lowercased() 
    let sanitizedString = lowerCasedString.replacingOccurrences(of: "\\d+|:", with: " ", options: .regularExpression) 
    let splittedStringArray = sanitizedString.split { [",", "[", "]", " ", " - ", "(", ")", ".", "/"].contains(String($0)) }.map(String.init) 
    print(splittedStringArray) 

    return splittedStringArray 
} 

當我運行功能我仍然看到許多符號和文字,如John's。如何改進此功能以去除所有可能的符號?

我基本上只是想要在我的文本中留下字母。

另外,Swift中是否有任何衛生框架用於此目的?

回答

2

此答案使用NSString

import Foundation 

public extension String { 
    var sanitized: String { 
    return self 
     .replacingOccurrences(of: "[^a-zA-Z0-9]", with: " ", options: .regularExpression) 
     .replacingOccurrences(of: "\\s+", with: " ", options: .regularExpression) 
    } 
} 

print("John's pet (Parson) is sleeping in a car: a BMW.".sanitized) // John s pet Parson is sleeping in a car a BMW 

它的工作原理通過String兩次;第一,取代非字母數字字符的出現,第二,用單個空格替換多個空格。

+0

@DennisVennik,謝謝你的回答!我還有一個問題。我發現另一個邊緣情況是「 - 」。假設有一個詞是「兼職」。在目前的解決方案中,當我真的想將它保留爲「兼職」時,它將剝離「 - 」字。你如何寫一個正則表達式來包含「 - 」? – user7418039

+0

@ user7418039您可以將'\\ - '添加到'「[^ a-zA-Z0-9]」'來製作'「[^ a-zA-Z0-9 \\ - ]」'。 –