使用前缀列表从字符串中删除前缀

Oxt*_*hor 2 string swift

我想知道如何从给定的字符串中删除前缀列表中包含的任何前缀(例如:[“the”,“a”,“an”](例如:“A big redplanet”->“big redplanet”) ”)。

我尝试过这个想法,但我不知道它是否正确或最有效。

extension String {
  func removing(prefixes: [String]) -> String {
    var resultString = self
    prefixes.map {
      if resultString.hasPrefix($0) {
        resultString = resultString.dropFirst($0.count).description
      }
    }
    return resultString
  }
}
Run Code Online (Sandbox Code Playgroud)

想法来自这个答案:如何通过标题的第一个字母创建字典,但忽略“the”或“a/an”等文章

vad*_*ian 5

这是使用正则表达式的替代方法

好处:

  • 大小写敏感可以轻松处理。
  • 前缀后面的可选空白字符也可以省略。

正则表达式模式是^(prefix1|prefix2|prefix3)\\s?. 它匹配字符串 ( ^) 的开头,后跟一个(带引号的)前缀(作为or带有运算符的表达式|),后跟可选的空白字符 ( \\s?)。

extension String {
    func removingPrefixes(_ prefixes: [String]) -> String {
        let pattern = "^(\(prefixes.map{"\\Q"+$0+"\\E"}.joined(separator: "|")))\\s?"
        guard let range = self.range(of: pattern, options: [.regularExpression, .caseInsensitive]) else { return self }
        return String(self[range.upperBound...])
    }
}
Run Code Online (Sandbox Code Playgroud)