Swift中如何使用正则将{{}}中的变量名替换为对应值?
在Swift中用正则实现{{变量}}替换的方案
你可以通过NSRegularExpression配合字典映射来实现这个需求,核心思路是用正则匹配{{变量名}}格式的内容,再从字典中取出对应值替换掉匹配项。
实现代码示例
let pairs: [String: Int] = ["a": 10, "b": 20] var targetStr = "I have {{a}} apples and {{b}} pears" // 定义正则表达式:匹配{{变量名}},捕获中间的变量名部分 guard let regex = try? NSRegularExpression(pattern: "\\{\\{([^}]+)\\}\\}", options: []) else { fatalError("正则表达式格式错误") } // 执行替换操作 targetStr = regex.stringByReplacingMatches( in: targetStr, range: NSRange(targetStr.startIndex..., in: targetStr), withTemplate: "" ) { match, _ -> String in // 从捕获组中提取变量名 guard let variableRange = Range(match.range(at: 1), in: targetStr) else { return "" } let variableName = String(targetStr[variableRange]) // 从字典取值,无对应值时返回空(也可改为保留原{{变量名}}格式) return String(pairs[variableName] ?? "") } print(targetStr) // 输出:I have 10 apples and 20 pears
关键说明
- 正则表达式
\\{\\{([^}]+)\\}\\}:\\{\\{转义匹配开头的两个大括号([^}]+)捕获任意非}的字符(即变量名),确保只匹配到闭合的}}前的内容\\}\\}转义匹配结尾的两个大括号
- 替换逻辑:通过闭包处理每个匹配项,提取捕获的变量名后从字典中取值,将值转为字符串作为替换结果;如果变量名不存在,可根据需求返回空或保留原格式(比如返回
"{{\(variableName)}}")
内容的提问来源于stack exchange,提问作者user5156895
相关产品推荐
相关产品推荐

