如何在特殊字符后的字符串中获取值

时间:2019-08-05 16:05:35

标签: swift regex split

我需要删除字符前字符串中的一些数据。

我需要删除字符串前面的数字。

var str= "123456Z789456123"        // output: Z789456123
var str= "123456K789456123"        // output: K789456123
var str= "1234U789456123"          // output: U789456123
var str= "123456909D789456123"     // output: D789456123

我无法找到解决方案。

3 个答案:

答案 0 :(得分:1)

两个选项(还有更多选项):

  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)
    
  2. 正则表达式搜索第一个非数字字符

    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个字符开始,只要它们是数字。