регулярное выражение swift replaceOccurrence с вычислением чисел - PullRequest
0 голосов
/ 17 января 2020

У меня есть [size=some_number%]some_text[/size], и я хочу заменить его на

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

, где font_size - это некоторая переменная типа int
Я знаю, как извлечь some_number и some_text с помощью регулярного выражения, но как я могу это сделать? сделать расчет multipl ie? Есть ли способ сделать это быстрым вечером, используя replacecingOccurferences?

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

1 Ответ

1 голос
/ 17 января 2020

Есть ли способ сделать это быстрым вечером с использованием replacecingOccurferences?

Регулярные выражения ICU не выполняют математические функции. Вам придется иметь дело с ними по одному, выполняя поиск, выполняя вычисления, а затем выполняя замену для этого вхождения, повторяя это в al oop. L oop в обратном порядке, чтобы избежать проблем со смещением индекса.

Например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...