我需要删除字符前字符串中的一些数据。
我需要删除字符串前面的数字。
var str= "123456Z789456123" // output: Z789456123
var str= "123456K789456123" // output: K789456123
var str= "1234U789456123" // output: U789456123
var str= "123456909D789456123" // output: D789456123
我无法找到解决方案。
答案 0 :(得分:1)
两个选项(还有更多选项):
Scanner
let str = "123456Z789456123"
let scanner = Scanner(string: str)
var output : NSString?
scanner.scanUpToCharacters(from: .letters, into: nil)
scanner.scanCharacters(from: .alphanumerics, into: &output)
print(output! as String)
正则表达式搜索第一个非数字字符
let str = "123456Z789456123"
let range = str.range(of: "\\D", options: .regularExpression)!
let output = str[range.lowerBound...]
答案 1 :(得分:-1)
var str = "123456Z789456123"
let characterSet = CharacterSet(charactersIn: "ZKUD")
let firstIndex = str.firstIndex { characterSet.contains($0.unicodeScalars.first!) }
let substr = str[firstIndex!...]
或使用扩展名:
var str = "123456Z789456123" // output: Z789456123
extension String {
func strip(before characterSet: CharacterSet) -> String {
if let firstIndex = self.firstIndex(where: { characterSet.contains($0.unicodeScalars.first!) }) {
return String(self[firstIndex...])
}
return self
}
func stripBeforeLetters() -> String {
return strip(before: .letters)
}
}
let substr = str.strip(before: CharacterSet(charactersIn: "ZKUD"))
let anotherSubstr = str.stripBeforeLetters()
答案 2 :(得分:-1)
这是一个简洁的内衬:
let subStr = String(str.drop { $0.isNumber })
通过检查drop或.isNumber
字符属性,可以从字符串的开头.isWholeNumber
个字符开始,只要它们是数字。