Swift 重構(gòu):正則表達(dá)式/NSRegularExpression 過濾文本

思路來(lái)源:

開發(fā)中遇到復(fù)雜的字符匹配,正則表達(dá)式是最常用的實(shí)現(xiàn)方式,每次從頭寫一堆重復(fù)/相似的代碼就很令人煩躁的,隨想重構(gòu)一下使用方法,方便以后使用,最終一行調(diào)用即可;

//定義常見匹配模式
public extension NSRegularExpression{

    ///正則匹配模式
    enum Pattern: String {

        ///漢字匹配表達(dá)式
        case hanzi = "[\\u4E00-\\u9FA5]+"

        ///非漢字匹配表達(dá)式
        case nonHanzi = "[^\\u4E00-\\u9FA5]+"

        ///英文字母匹配表達(dá)式
        case alphabet = "[a-zA-Z]+"

        ///非英文字母匹配表達(dá)式
        case nonAlphabet = "[^a-zA-Z]+"

        ///數(shù)字匹配表達(dá)式
        case number = "[0-9]+"

        ///非數(shù)字匹配表達(dá)式
        case nonNumber = "[^0-9]+"

        ///浮點(diǎn)數(shù)匹配表達(dá)式
        case float = "[0-9.]+"

        ///非浮點(diǎn)數(shù)匹配表達(dá)式
        case nonFloat = "[^0-9.]+"
    }
}

Example

核心方法 matchTuple 返回元祖(NSRange,String)數(shù)組;

let input = "My name is 泰勒 88.8, My name is 斯威夫特 99.9"

let tuples = NSRegularExpression.matchTuple(NSRegularExpression.Pattern.alphabet.rawValue, input: input)
DDLog(tuples)//[({0, 2}, "My"), ({3, 4}, "name"), ({8, 2}, "is"), ({20, 2}, "My"), ({23, 4}, "name"), ({28, 2}, "is")]

        
let dic = NSRegularExpression.matchDic(NSRegularExpression.Pattern.alphabet.rawValue, input: input)
DDLog(dic)// ["{28, 2}": "is", "{23, 4}": "name", "{8, 2}": "is", "{0, 2}": "My", "{3, 4}": "name", "{20, 2}": "My"]
///匹配漢字
let result = NSRegularExpression.matchTuple2(.hanzi, input: input)
//**[({11, 2}, "泰勒"), ({31, 4}, "斯威夫特")]**

///匹配非漢字
let result1 = NSRegularExpression.matchTuple2(.nonHanzi, input: input)
///匹配數(shù)字
let result2 = NSRegularExpression.matchTuple2(.number, input: input)
///匹配非數(shù)字
let result3 = NSRegularExpression.matchTuple2(.nonNumber, input: input)
///匹配浮點(diǎn)數(shù)字
let result4 = NSRegularExpression.matchTuple2(.float, input: input)
///匹配非浮點(diǎn)數(shù)字
let result5 = NSRegularExpression.matchTuple2(.nonFloat, input: input)
///匹配大小寫字母
let result6 = NSRegularExpression.matchTuple2(.alphabet, input: input)
///匹配非大小寫字母
let result7 = NSRegularExpression.matchTuple2(.nonAlphabet, input: input)

DDLog(result)
//**[({11, 2}, "泰勒"), ({31, 4}, "斯威夫特")]**
DDLog(result1)
//**[({0, 11}, "My name is "), ({13, 18}, " 88.8, My name is "), ({35, 5}, " 99.9")]**
DDLog(result2)
//**[({14, 2}, "88"), ({17, 1}, "8"), ({36, 2}, "99"), ({39, 1}, "9")]**
DDLog(result3)
//**[({0, 14}, "My name is 泰勒 "), ({16, 1}, "."), ({18, 18}, ", My name is 斯威夫特 "), ({38, 1}, ".")]**
DDLog(result4)
//**[({14, 4}, "88.8"), ({36, 4}, "99.9")]**
DDLog(result5)
//**[({0, 14}, "My name is 泰勒 "), ({18, 18}, ", My name is 斯威夫特 ")]**
DDLog(result6)
//**[({0, 2}, "My"), ({3, 4}, "name"), ({8, 2}, "is"), ({20, 2}, "My"), ({23, 4}, "name"), ({28, 2}, "is")]**
DDLog(result7)
//**[({2, 1}, " "), ({7, 1}, " "), ({10, 10}, " 泰勒 88.8, "), ({22, 1}, " "), ({27, 1}, " "), ({30, 10}, " 斯威夫特 99.9")]**
   

源碼

github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容