gpt4 book ai didi

ios - 在 Swift 中将 %1$s 等占位符转换为 {x}

转载 作者:行者123 更新时间:2023-12-01 18:34:30 24 4
gpt4 key购买 nike

我正在解析一个 XML 文档(使用 XMLParser),其中一些值具有类似 php 的占位符,例如%1$s ,我想将它们转换为 {x-1} .

例子:

%1$s ---> {0}

%2$s ---> {1}

我使用正则表达式以一种看似 hacky 的方式执行此操作:

但是这个正则表达式必须有更好的实现。

考虑一个字符串:

let str = "lala fawesfgeksgjesk 3rf3f %1$s rk32mrk3mfa %2$s fafafczcxz %3$s czcz $#$#@%#@ %4$s qqq %5$s"

现在我们要提取字符串 之间的整数字符串。 % $s :
let regex = try! NSRegularExpression(pattern: "(?<=%)[^$s]+")

let range = NSRange(location: 0, length: str.utf16.count)

let matches = regex.matches(in: str, options: [], range: range)
matches.map {
print(String(str[Range($0.range, in: str)!]))
}

工作得很好。问题是“4”值因为 之前的随机字符串而混淆了。 %4$s .

打印:
1
2
3
#@ %4
5

有没有更好的方法来做到这一点?

最佳答案

这可能不是一种非常有效(或 swift :))的方式,但它可以完成工作。它的作用是搜索给定的 reg ex 并使用匹配的子字符串来提取数值并减少它,然后在子字符串和新构造的占位符值之间执行简单的替换。这将在循环中执行,直到找不到更多匹配项。

let pattern = #"%(\d*)\$s"#

while let range = str.range(of: pattern, options: .regularExpression) {
let placeholder = str[range]
let number = placeholder.trimmingCharacters(in: CharacterSet(charactersIn: "0123456789.").inverted)

if let value = Int(number) {
str = str.replacingOccurrences(of: placeholder, with: "{\(value - 1)}")
}
}

关于ios - 在 Swift 中将 %1$s 等占位符转换为 {x},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62361346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com