【问题标题】:How to extract data within parenthesis in swift? [duplicate]如何快速提取括号内的数据? [复制]
【发布时间】:2017-06-12 06:54:23
【问题描述】:

我正在尝试快速提取括号内的一些数字。

例如。

var accname = "(1234) some random texts"

如何从 var s 获得 1234 ?括号中的数字没有固定的长度。它可以是 (12) 或 (12345)。

这是我尝试过的

var accname = ""
for i in accname.characters.indices[(accname.startIndex)..<accname.endIndex]{

       while accname[i] != ")"{
                accnumb.append(accname[i])
        }
        }

【问题讨论】:

标签: swift swift3


【解决方案1】:

您可以使用@oisdk 建议的以下扩展:

var demoText = "(1234)  e e e er er e"

extension String {
func slice(from: String, to: String) -> String? {
    
    return (range(of: from)?.upperBound).flatMap { substringFrom in
        (range(of: to, range: substringFrom..<endIndex)?.lowerBound).map { substringTo in
            String(self[substringFrom..<substringTo])
        }
    }
}
}


let sliced  = demoText.slice(from: "(", to: ")")

【讨论】:

    【解决方案2】:

    您的代码有几个问题:

    • while 替换为if
    • for ... in ... 用于实际字符,而不是索引
    • 删除第一个字符
    • 一遇到)就停止整个逻辑

    这会在不改变您的基本逻辑的情况下生成以下代码:

    let accname = "(1234) some random texts"
    var accnumb = ""
    for char in accname.characters.dropFirst() {
        if char != ")" {
            accnumb.append(char)
        } else {
            break
        }
    }
    print(accnumb) // 1234
    

    【讨论】:

      【解决方案3】:

      这是您可以使用的另一个扩展,它创建一个包含所有数值的字符串并将其用于过滤:

      extension String {
          var numericString: String? {
              let numericValues = "1234567890"
              let filteredString = self.characters.filter {
                  return numericValues.contains(String($0))
              }
              guard filteredString.count > 0 else {
                  return nil
              }
              return String(filteredString)
          }
      }
      
      let value = "(1234)"
      let numericString = value.numericString // "1234"
      
      let badValue = "no numbers here"
      let badNumericString = badValue.numericString // nil
      
      let anotherValue = "numbers 2 and text 4here 56"    
      let anotherString = anotherValue.numericString // "2456"
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-09-02
        • 2022-01-18
        • 1970-01-01
        • 2018-11-18
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多