Мне нужно скопировать некоторые данные в строке перед символом.
Мне нужно сорвать номер перед строкой.
var str= "123456Z789456123" // output: Z789456123
var str= "123456K789456123" // output: K789456123
var str= "1234U789456123" // output: U789456123
var str= "123456909D789456123" // output: D789456123
Я не могу найти решение для этого.
Две опции (существуют больше):
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...]
var str = "123456Z789456123"
let characterSet = CharacterSet(charactersIn: "ZKUD")
let firstIndex = str.firstIndex { characterSet.contains([110].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([111].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()
Вот краткая острота:
let subStr = String(str.drop { [110].isNumber })
Это было бы отбрасывание символы с начала строки, пока они - цифры путем проверки или .isNumber
или .isWholeNumber
свойства Character.