簡體   English   中英

在Swift 3中將正則表達式與管道分隔符結合使用以過濾出匹配項

[英]Using regex with pipe separators in Swift 3 to filter out matches

到目前為止,已經看了很多正則表達式stackoverflow問題,但對於為什么我的正則表達式沒有過濾掉我想刪除的子字符串,我有些困惑。 我很快知道,我需要逃脫其他所有逃生。

首先,我對String進行了擴展,如下所示:

extension String {
    func stringByRemovingRegexMatches(pattern: String, replaceWith: String = "") -> String? {
        do {
             let regex = try NSRegularExpression(pattern: pattern, options: NSRegularExpression.Options.caseInsensitive)
            print(regex)
            let range = NSMakeRange(0, self.characters.count)
            return regex.stringByReplacingMatches(in: self, options: [], range: range, withTemplate: replaceWith)
        } catch {
            return nil
        }
    } 
}

例如,假設文本為:

+++cta\\n[![](http://media.test.com/1.jpg)](http://www.test.com/slideshow)\\n\\n+++\\n\\n<span class=\\"s1\\">Hello</span><span class=\\"s2\\"> World\\n\\n[cm_image id=\\"13501068\\"]<img style=\\"width: 100%;\\" src=\\"http://www.test.com/1.jpg\\" alt=\\"\\" />[/cm_image]\\n\\n[#c: /c/56be30deff2afb50ef000026]||||||

我希望它在我的Swift項目中返回Hello World\\n ,但它似乎只能過濾出<span>

+++cta\\n[![](http://media.test.com/1.jpg)](http://www.test.com/slideshow)\\n\\n+++\\n\\nHello World\\n\\n[cm_image id=\\"13501068\\"]<img style=\\"width: 100%;\\" src=\\"http://www.test.com/1.jpg\\" alt=\\"\\" />[/cm_image]\\n\\n[#c: /c/56be30deff2afb50ef000026]||||||

我在Swift中的正則表達式字符串是:

"\\+(^)\\+|\\\\n\\[(.*)\\|\\|\\|\\|\\|\\||\\\\n\\[c(.*)\\\\n\\\\n|\\+(.*)\\+\\\\n\\\\n|<[^>]+>"

您會在上面注意到我有一個regex的打印語句,該語句與我要輸入的regex匹配,字符串為:

<NSRegularExpression: 0x7ff8d576df00> \+(^)\+|\\n\[(.*)\|\|\|\|\|\||\\n\[c(.*)\\n\\n|\+(.*)\+\\n\\n|<[^>]+> 0x1

\+(^)\+|\\n\[(.*)\|\|\|\|\|\||\\n\[c(.*)\\n\\n|\+(.*)\+\\n\\n|<[^>]+>

他們都是完全一樣的。

為了進一步說明,我在這里有regexr的鏈接。

我在Swift中做錯了什么嗎? 是迅速不識別(.*)嗎? 任何幫助將不勝感激。

因此確保在startIndex和endIndex之間有((.|\\n)*)解決此問題,因為我希望所有字符或邊界之間的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM