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

时间:2017-11-24 08:01:03

标签: ios swift string

我想知道如何删除前缀列表中包含的任何前缀(例如:[“the”,“a”,“an”]来自给定字符串(例如:“一个大红色星球” - > “大红色星球”)。

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

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

想法来自这个答案:How to create a dictionary by first letter of title but ignore articles like "the" or "a/an" etc

2 个答案:

答案 0 :(得分:3)

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

好处:

  • 案例(in)灵敏度可以轻松处理。
  • 也可以省略前缀后面的可选空白字符。

正则表达式模式为^(prefix1|prefix2|prefix3)\\s?。它匹配字符串的开头(^),后跟一个(引用的)前缀(or表达式与|运算符),后跟可选的空白字符({{1} })。

\\s?

答案 1 :(得分:0)

将比较目标更改为大写或小写以进行比较。

我不知道这是否是你想要的答案,但我希望它有所帮助。

 prefixes.map {
        if resultString.hasPrefix($0.uppercased()) || resultString.hasPrefix($0.lowercased()) {
            resultString = resultString.dropFirst($0.count).description
        }
  }

完整资源

extension String {
   func removingPrefixes(_ prefixes: [String]) -> String {
       var resultString = self

       prefixes.map {
           if resultString.hasPrefix($0.uppercased()) || resultString.hasPrefix($0.lowercased()) {
              resultString = resultString.dropFirst($0.count).description
              print("\(resultString)")
          }
      }
      return resultString
   }
}

/**  print("A big red the planet".removingPrefixes(["the", "a", "an"]))
  *  result -> "big red the planet" */