swift 替换出现正则表达式与数字计算



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

<font size="some_number*font_size">sometext</font>

其中font_size是一些 int 变量,
我知道如何使用正则表达式提取some_number和some_text,但是我该如何进行乘法计算?有没有办法使用替换事件快速推理

#"[size=(d+)%]([sS]*?)[/size]"#

有没有办法使用 replacementlacingOccurrences 在 swift justing 中做到这一点?

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

最新更新