【问题标题】:swift replacingOccurrences regular expression with number calculation用数字计算快速替换Occurrences正则表达式
【发布时间】:2020-01-17 05:20:06
【问题描述】:

我有[size=some_number%]some_text[/size],我想用

替换它
<font size="some_number*font_size">sometext</font>

font_size 是一些 int 变量
我知道如何使用正则表达式提取 some_number 和 some_text,但是如何进行乘法计算?有没有办法使用 replaceOccurrences 快速调整?

#"\[size=(d+)%\]([\s\S]*?)\[\/size\]"#

【问题讨论】:

    标签: swift nsregularexpression


    【解决方案1】:

    有没有办法使用 replaceOccurrences 快速调整?

    ICU 正则表达式不做数学运算。您必须一次处理这些,进行搜索,执行计算,然后为该事件执行替换,循环重复。反向循环以避免索引移位问题。

    例如:

    var s = """
    yo[size=6%]ooo[/size]heyho[size=10%]yyy[/size]ha
    """
    let font_size = 10
    let reg = try! NSRegularExpression(pattern: "\\[size=(\\d+)%\\]([\\s\\S]*?)\\[\\/size\\]", options: [])
    let matches = reg.matches(in: s, options: [], range: NSRange(location: 0, length: s.utf16.count))
    let rev = matches.reversed() // work backwards for replacement
    for match in rev {
        let r = match.range
        let size = s[Range(match.range(at:1), in:s)!]
        let text = s[Range(match.range(at:2), in:s)!]
        let prefix = "<font size=\""
        let num = String(Int(size)!*font_size)
        let rest = "\">" + text + "</font>"
        s = s.replacingCharacters(in: Range(r, in:s)!, with: prefix + num + rest)
    }
    print(s)
    


    现在s

    yo<font size="60">ooo</font>heyho<font size="100">yyy</font>ha
    

    【讨论】:

    • 严格来说,集合的突变会使 所有 索引(不仅是突变点处和之后的索引)无效。但我不知道这是否真的会成为字符串的问题。
    猜你喜欢
    • 2019-11-19
    • 2021-09-17
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2020-03-30
    相关资源
    最近更新 更多