将字符串中匹配的正则表达式值替换为字典中的正确值

2024-03-13

我有一根绳子

var text = "the {animal} jumped over the {description} fox"

和一本字典

var dictionary = ["animal":"dog" , "description", "jumped"]

我正在编写一个函数,用字典中的适当值替换大括号中的文本。我想为此使用正则表达式。

 //alpha numeric characters, - and _
 let regex = try NSRegularExpression(pattern: "{[a-zA-Z0-9-_]}", options: .caseInsensitive)

var text = "the {animal} jumped over the {description} fox"
let all = NSRange(location: 0, length: text.count)

regex.enumerateMatches(in: text, options: [], range: all) { (checkingResult, matchingFlags, _) in
    guard let resultRange = checkingResult?.range else {
        print("error getting result range")
        return
    }
    //at this point, i was hoping that (resultRange.lowerbound, resultRange,upperBound) would be the start and end index of my regex match. 
    //so print(text[resultRange.lowerBound..<resultRange.upperBound] should give me {animal}
    //so i could get the word between the curly braces, and replace it in the sentence with it dictionary value         
}

但是快速的字符串操作对我来说非常令人困惑,而且这似乎不起作用。

这是正确的方向吗?

Thanks


这是一种有效的解决方案。字符串处理更加复杂,因为您还必须处理NSRange.

extension String {
    func format(with parameters: [String: Any]) -> String {
        var result = self

        //Handles keys with letters, numbers, underscore, and hyphen
        let regex = try! NSRegularExpression(pattern: "\\{([-A-Za-z0-9_]*)\\}", options: [])

        // Get all of the matching keys in the curly braces
        let matches = regex.matches(in: self, options: [], range: NSRange(self.startIndex..<self.endIndex, in: self))

        // Iterate in reverse to avoid messing up the ranges as the keys are replaced with the values
        for match in matches.reversed() {
            // Make sure there are two matches each
            // range 0 includes the curly braces
            // range 1 includes just the key name in the curly braces
            if match.numberOfRanges == 2 {
                // Make sure the ranges are valid (this should never fail)
                if let keyRange = Range(match.range(at: 1), in: self), let fullRange = Range(match.range(at: 0), in: self) {
                    // Get the key in the curly braces
                    let key = String(self[keyRange])
                    // Get that value from the dictionary
                    if let val = parameters[key] {
                        result.replaceSubrange(fullRange, with: "\(val)")
                    }
                }
            }
        }

        return result
    }
}

var text = "the {animal} jumped over the {description} fox"
var dictionary = ["animal":"dog" , "description": "jumped"]
print(text.format(with: dictionary))

Output:

狗跳过了跳跃的狐狸

这段代码保留了原来的{keyname}如果在字典中找不到该字符串,则在该字符串中。根据需要调整该代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串中匹配的正则表达式值替换为字典中的正确值 的相关文章

  • 多行 C# 正则表达式在空行后匹配

    我正在寻找一个多行正则表达式 它将匹配空行后出现的情况 例如 给定下面的示例电子邮件 我想匹配 发件人 Alex From s 可以匹配任何 From 行 但我希望它仅限于正文中的行 第一个空白行之后的任何行 Received from a
  • 无法安装企业应用程序 - 此配置文件无法安装在此设备上

    我正在设置 Jenkins 来构建应用程序的企业版本 以便在我们的内部应用程序商店中分发 如果我将应用程序存档在 Xcode 中 然后在手机上下载内置的 ipa 则应用程序安装不会出现任何问题 但是当我使用 Jenkins 生成的具有相同私
  • 以编程方式向 UIButton 标签添加阴影

    我试图向按钮标签添加 1px 黑色阴影 但没有成功 我试过这个 self setTitleShadowOffset CGSizeMake 0 1 但我得到 请求非结构或联合中的成员 setTitleShadowOffset 任何建议都会很棒
  • 以任意顺序匹配可选捕获组

    在解析用户输入的许多情况下 用户有机会向输入添加几个可选标志 这些标志应该以任何顺序接受 如何使用正则表达式对其进行解析 以便每个标志都位于它自己的捕获组中 如果存在 例如 有一个必需的令牌a 然后是 3 个可选标记 可以按任何顺序出现b
  • 正则表达式捕获和替换可以与 Apache DirectoryMatch 指令一起使用吗?

    有谁知道是否可以在 Apache 的 DirectoryMatch 指令中使用正则表达式捕获 我想做类似以下的事情
  • 需要正则表达式(使用 C#)将所有空白压缩为单个空白

    我需要将文档中的多个空格替换为单个空格 每次迭代 无论它们是空格 制表符还是换行符 任何类型的空格的任何组合都需要被截断为单个空格 假设我们有字符串 Hello t t n t n world 其中 t 和 n 分别代表制表符和换行符 那么
  • 正则表达式从字符串中提取 IP 和端口

    我正在使用 Perl 尝试从字符串中提取 IP 地址和端口 我尝试使用的正则表达式是 s sip 字符串是 sip 255 255 255 255 8080 transport TCP sip 255 255 255 255 8080 显然
  • 正则表达式,选择最接近的匹配

    假设以下单词序列 BLA text text text text text text BLA text text text text LOOK text text text BLA text text BLA 我想做的是将 BLA 中的文本
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • iOS NSURLSession,如何在didCompleteWithError中重试

    我想在我的服务器上尝试一次调用 直到成功为止 我想每 30 秒尝试一次 所以我使用 NSURLSession 进行通话 NSURLSessionDownloadTask task self session downloadTaskWithR
  • 如何获取 UITableView 中的所有单元格

    假设我有一个包含多行的 UITableView 我想在某个时间点将所有 UITableViewCells 作为 NSArray 获取 我努力了 tableView visibleCells 但这种方法有一个问题 我无法拥有当前不在当前屏幕中
  • 我如何从 iPhone 设备获取电子邮件历史记录..?

    friends 我想从我的 iPhone 访问电子邮件历史记录 并且还希望在收到新邮件时收到通知 如果可能的话 请向我提供源代码片段 Thanks 简而言之 使用任何已记录的 API 都是不可能的
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 所有针对 iTunes Connect 的构建,导入此构建时出错 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我将构建上传到应用程序商店 之后它在活动中显示错误 任何人都可以帮帮我 SOLVED 转到构建设置 gt 搜索 bitcode gt 转启
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • 正则表达式将单词的开头和结尾与元音匹配

    我正在尝试以下操作Regex aeiou aeiou 但它不起作用 我测试了 abcda 并且不匹配 它应该只是 aeiou aeiou 额外的 您需要第二个字符是一个文字点 例如 a hello 但由于您的测试用例 abcda 不包含这样
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV

随机推荐

  • 将 dash_html_components 传递到 Jinja 模板中

    我正在使用 Python 库 Dash 文档声称它不支持使用仪表板 html 代码编写原始 html 的功能 是否有已知的解决方法 例如传递dcc Graph into render template 与烧瓶 我想要迁移到 Jinja 模板
  • PHP 浮动错误:PHP 挂在数值上

    我刚刚读了一篇关于 php 挂在某些浮点数上的有趣文章 请参阅登记册 http www theregister co uk 2011 01 04 weird php dos vuln and 探索二进制 http www exploring
  • “iddata”类型的输入参数未定义函数“minus”

    这是后续我之前遇到的一个问题 https stackoverflow com questions 45688607 我想给信号一个偏移量 然后在其中添加一些延迟并计算 RMSE 但是在求差时我遇到以下问题 我想请教以下问题 我该如何解决上述
  • MailKit OAuth2.0 身份验证失败异常

    我使用以下代码来获取访问令牌并连接到邮件文件夹 var confidentialClientApplicationBuilder ConfidentialClientApplicationBuilder Create clientId Wi
  • 将 Scrapy 与经过身份验证(登录)的用户会话一起使用

    In the Scrapy 文档 https doc scrapy org en latest topics request response html using formrequest from response to simulate
  • 将表空间从一个 postgresql 实例复制到另一个实例

    我正在寻找一种方法来快速将数据库从一台 postgresql 服务器 克隆 到另一台服务器 假设 我有一个在 HostA 上运行的 postgresql 服务器 为 2 个数据库提供服务 我在 HostA 上安装了 2 个设备 每个设备存储
  • 帮助解决我的应用程序崩溃的原因?

    我正在编写一个 iPad 应用程序 它是一个 信息亭 应用程序 iPad 应该挂在墙上 并且应用程序应该可以运行 我做了一个测试 昨晚 12 月 31 日星期五 启动了应用程序并让它运行 今天早上 当我醒来时 它没有运行 我刚刚检查了 iP
  • 如何在保留颜色的同时将 Mat 对象转换为位图?

    在我正在开发的应用程序中 我使用打开相机OpenCV4Android using CameraBridgeViewBase CvCameraViewListener2当我触摸屏幕时 我将该框架设置为内部的图像ImageView如下代码所示
  • 检测用户退出站点

    我迫切希望检测用户何时离开我的网站 以便准确记录相关用户的会话长度 我想到了几个可能的解决方案 我首先想到我可以使用 onbeforeunload 并发送一个简单的 ajax 来记录最后一个活动 但实践告诉我 onbeforeunload
  • 为什么 x64 项目使用默认的打包对齐方式 16?

    如果您在 VS2012 的 x64 项目中编译以下代码而不使用任何 Zp 标志 pragma pack show 然后编译器会吐出 value of pragma pack show 16 如果项目使用Win32 编译器会输出 value
  • 如何让 Google 表格脚本在特定单元格的值发生变化时发送电子邮件?

    我正在尝试为我的 Google 表格设置一个脚本 该脚本将在特定单元格的值发生更改时发送电子邮件 我还想知道是否有办法设置脚本 使其每天只发送一次 例如 如果一天进行多次更改 我宁愿它在一天结束时只发送一封电子邮件 而不是每次都发送一封电子
  • 我如何从android中的php服务器获取这个json数据

    我如何在android中获取这个json数据 该数据位于本地主机中 我必须使用 URL 获取此数据并在 android 的列表视图中显示 任何人都可以帮助编码吗 id 111114 name Prandar id 111115 name C
  • 将 C# 函数指针传递到 C++/CLI 互操作 dll

    我试图将函数指针从 C 传递到 C CLI 并收到一个 Windows 编译器错误 指出ManagedTakeCallback该语言 C 不支持函数 我定义了ManagedTakeCallback在 C CLI 互操作中 我的代码看起来像
  • 将 ASP.NET 行添加到 ListBox

    我需要在 ASP NET 中的列表框中添加一行 以便与用户可以选择的许多选项进行一定的分离 目前 我们有超过 20 个不同的选项供用户选择 我需要将最受欢迎的放在最上面 我的逻辑是将流行的选项放在顶部 但认为列表框中的一行将帮助用户将它们与
  • 无法使用 Selenium WebDriver 在 Chrome 中加载默认配置文件

    我正在使用 Selenium WebDriver 在需要 http 身份验证的页面上执行某些操作 我已经登录我的默认配置文件 但 selenium chromedriver 会自动为每次使用使用新的配置文件 因此我无法通过身份验证阶段 因此
  • libcurl 回调 w/c++ 类成员

    取自libcurl 编程教程 http curl haxx se libcurl c libcurl tutorial html在 libcurl 网站上 libcurl 与 C 使用 C 时基本上只需要记住一件事 在连接 libcurl
  • 未注入通过 RequireJS 从 CDN 加载 Angular

    在我的项目中 我想使用 RequireJS 并引导我的应用程序 如下所示 requirejs config baseUrl scripts vendor paths jquery https ajax googleapis com ajax
  • CustomAttribute反映html属性MVC5

    希望找到一种方法 当在 MVC5 中使用 Custom 属性或最好使用 RegularExpressionAttribute 装饰模型中的属性时 html 控件将包含它作为控件的另一个属性 例如 class CoolModel Custom
  • Hibernate 查询语言中四舍五入到小数点后两位

    你好 有人可以帮我如何在 hql 中四舍五入到小数点后两位吗 我在网上找不到任何东西 以下是我的查询 Select p amount as amt p desc from pay p register r where r type 1 an
  • 将字符串中匹配的正则表达式值替换为字典中的正确值

    我有一根绳子 var text the animal jumped over the description fox 和一本字典 var dictionary animal dog description jumped 我正在编写一个函数