[英]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.