【问题标题】:How to individuate code between markdown in string如何在字符串中的降价之间区分代码
【发布时间】:2021-08-30 17:29:28
【问题描述】:

我正在创建一个文本视图,用户可以在其中插入代码片段。
我希望他们能够像这样插入降价:

```这里有一些文字`

然后我想对降价之间理解的文本进行个体化,并对其应用一些特征。

假设一个字符串可以包含更多的降价,我怎样才能得到降价内的所有字符串?

假设我有以下字符串:

"在 Swift 中,```UIView` 是管理屏幕上矩形区域内容的对象。它是 ``UIResponder` 的子类。``UIPickerView` 是 ``UIView` 的子类"

我想区分子字符串:UIView、UIResponder、UIPickerView、UIView。
即 `` 和 ` 之间的所有子字符串。

我找到了一些解决方案,其中包括使用超级复杂的 for 循环,但我确信我们有一个更简单的方法,使用一些我不能使用的 String 方法......

【问题讨论】:

    标签: ios swift string substring


    【解决方案1】:

    你可以使用这样的正则表达式 -

    import Foundation
    
    let input = "In Swift a ```UIView` is An object that manages the content for a rectangular area on the screen. It subclasses ```UIResponder`. A ```UIPickerView` is a subclass of ```UIView`"
    do {
        let regex = try NSRegularExpression(pattern: #"(```.*?`)"#)
        let matches = regex.matches(in: input, range: NSRange(input.startIndex..., in: input))
        var results: [String] = []
        let nsStringInput = input as NSString
        for match in matches {
            results.append(nsStringInput.substring(with: match.range))
        }
        print(results)
    }
    catch {
        /// Handle error
    }
    

    输出 -

    [
        "```UIView`", 
        "```UIResponder`", 
        "```UIPickerView`", 
        "```UIView`"
    ]
    
    

    【讨论】:

    • 为什么要在结果中包含``` `
    • 这些结果(连同它们的反引号)将为用户提供字符串中的正确范围,用户应该用新属性(以及不带反引号的新文本)替换该范围。
    • 抱歉回来晚了,我喜欢这个解决方案!只是想知道,如果我不想在数组中包含反引号怎么办?
    • 使用#"```(.*?)"#` & match.range(at: 1) 分别表示正则表达式模式和match.range。你可以在这里直观地看到它 - imgur.com/wUAF2Qu
    猜你喜欢
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    • 2013-05-24
    • 2019-05-02
    • 1970-01-01
    • 2015-01-26
    • 2013-02-23
    • 1970-01-01
    相关资源
    最近更新 更多