在 Swift 中从字符串中提取某些文本

Posted

技术标签:

【中文标题】在 Swift 中从字符串中提取某些文本【英文标题】:Extracting certain text from String in Swift 【发布时间】:2016-12-07 08:12:49 【问题描述】:

我希望在 Swift 2.x 中做到这一点: 假设我在文本字段中输入文本。 - '苹果 iPhone http://www.apple.com'

我现在正在更新带有标签的 UIButton - Apple iPhone。当单击按钮启动'http://www.apple.com时,我想要IBAction。

我可以设置它,但我遇到问题的部分是 - 如何从文本字段中解析“Apple iPhone”和“http://www.apple.com”并将它们分开,以便我可以使用一些文本更新 UIButton 标签和使用 URL 启动 Safari 吗?更具体地说,我希望能够检测任何“文本”后跟“http://”,并始终使用文本来更新标签,并使用 http 来启动带有 url 的浏览器。 感谢您的回答。

【问题讨论】:

可能重复:***.com/questions/27040924/nsrange-from-swift-range 【参考方案1】:

这个问题有一个简单的解决方案,如下所述

var x = "Apple iPhone http://www.apple.com"

@IBAction func click(_ sender: UIButton) 
    let url = x.substring(from: x.range(of: "http")!.lowerBound)
    UIApplication.shared.openURL(NSURL(string: url)! as URL)

但是这个解决方案和所有给定的解决方案都存在问题, 如果您有这样的字符串:var x = "Apple iPhone http://www.apple.com wwdc",您将无法获得正确的结果。 通用解决方案可以是这样的:

@IBAction func click(_ sender: UIButton) 
    var text = "Apple iPhone http://www.apple.com wwwdc"

    let startIndex = text.range(of: "http")?.lowerBound
    var startString = text.substring(from: startIndex!)
    let endIndex = startString.range(of: " ")!.lowerBound
    var url = startString.substring(to: endIndex)

    UIApplication.shared.openURL(NSURL(string: url)! as URL)


它会正确提取网址。

【讨论】:

似乎它是获取确切网址的更好解决方案?? 如何将“Apple iPhone”单独存储在一个单独的字符串中? @NetCod let appleIphone = text.substring(to: startIndex!)【参考方案2】:

你可以使用 datadetactor 找到字符串上的 url,试试这个

        let types: NSTextCheckingType = .Link
        let detector = try? NSDataDetector(types: types.rawValue)
        let matches = detector!.matchesInString("your_string", options: .ReportCompletion, range: NSMakeRange(0,ActivityText!.characters.count))
        if matches.count > 0 
            let urlResult = matches.first
            let url = urlResult?.URL

            //now open this url
        

【讨论】:

谢谢。将研究此解决方案并使用 NSDataDetector。没有意识到这一点。我还将如何跟踪 url 之前的其余文本,以便我可以单独保存?【参考方案3】:

你需要使用

来自基础框架的componentsSeparatedByString 方法。

它返回一个字符串数组。

let array = inputField.text.componentsSeparatedByString("http://")

在您的情况下,它将在一个数组中有 2 个对象。首先是标签的文本,其次是您要在 webView 中打开的 URL。

if array.count>=2 
    let text = array[0]
    let url = array[1]

【讨论】:

这个解决方案似乎更简单。会试一试。谢谢。 不是一个好的解决方案,因为它仅适用于字符串的这种情况

以上是关于在 Swift 中从字符串中提取某些文本的主要内容,如果未能解决你的问题,请参考以下文章

在swift中从数组中提取值

如何在 C# 中从 MS Office 文档中提取文本

在 Swift 中从字符串调用方法

如何从 Swift 中的加密 JSON 字符串中提取某些字段?

在python beautifulsoup中从html中提取json

如何在 Swift 中更改 UILabel 文本某些部分的字体属性? [复制]