【问题标题】:NSRegularExpression to extract subset of text in Swift 3NSRegularExpression 在 Swift 3 中提取文本子集
【发布时间】:2018-04-06 23:27:51
【问题描述】:

我正在尝试使用 NSRegularExpression(pattern: regex) 在字符串中提取 10.32.15.235:\"IPAddress\":\"10.32.15.235\",\"WAN\" 使用 Swift 3。

但是,我在 answer 中使用此函数时遇到错误

func matches(for regex: String, in text: String) -> [String] {

    do {
        let regex = try NSRegularExpression(pattern: regex)
        let nsString = text as NSString
        let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
        return results.map { nsString.substring(with: $0.range)}
    } catch let error {
        print("invalid regex: \(error.localizedDescription)")
        return []
    }
}

有了这个电话:

        let pattern = "IPAddress\\\":\\\"(.+?)\\"
        let IPAddressString = self.matches(for: pattern, in: stringData!)
        print(IPAddressString)

但是,函数的错误部分被调用时出现这个错误:

无效的正则表达式:值“IPAddress\":\"(.+?)\”无效。

你能帮我修改 Swift 3 的正则表达式吗?

谢谢

【问题讨论】:

  • 看起来它最后缺少一个转义的双引号。尝试在模式末尾添加\"
  • 使用let pattern = "(?<=IPAddress\":\")[^\"]+"
  • 它是否如您所愿?

标签: regex swift3 nsregularexpression


【解决方案1】:

请注意,如果您有一个有效的 JSON,您可以在 Swift 中使用 JSON 解析器。

要修复您当前的正则表达式方法,您可以使用

let pattern = "(?<=IPAddress\":\")[^\"]+"

模式详情

  • (?&lt;=IPAddress\":\") - 一个正向前瞻,匹配字符串中紧跟在IPAddress":" 子字符串之后的位置
  • [^\"]+ - 与 " 以外的 1 个或多个字符匹配的否定字符类

请参阅regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 2020-05-23
    • 2012-03-24
    相关资源
    最近更新 更多