我想知道如何从给定的字符串中删除前缀列表中包含的任何前缀(例如:[“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”等文章
这是使用正则表达式的替代方法
好处:
正则表达式模式是^(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)
| 归档时间: |
|
| 查看次数: |
5856 次 |
| 最近记录: |