加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何使用像字符串模板这样的正则表达式替换?

发布时间:2020-12-17 01:55:37 所属栏目:百科 来源:网络整理
导读:所以这是场景.我有一个用户定义的正则表达式存储在变量my_ regex中.我应该没有其他知识,因为它有一个名为id的命名组.例如,一个有效的正则表达式可能是: my_regex = /ABC(?id...)ABC/ 我正在尝试这样做:将此正则表达式与字符串匹配,并用固定字符串“123”替
所以这是场景.我有一个用户定义的正则表达式存储在变量my_ regex中.我应该没有其他知识,因为它有一个名为id的命名组.例如,一个有效的正则表达式可能是:

my_regex = /ABC(?<id>...)ABC/

我正在尝试这样做:将此正则表达式与字符串匹配,并用固定字符串“123”替换组ID.例如:

my_func(my_regex,'ABC789ABCQQQQ')
#=> 'ABC123ABCQQQQ'

现在我知道如果我自己定义正则表达式可以做到这一点,例如,我可以将my_regex定义为/(ABC)(..)(ABC)/,并且只是使用

my_match_data = my_regex.match('ABC789ABCQQQQ')
result = my_match_data.captures[0] + '123' + my_match_data.captures[2]

然而,除了我不是那个定义它的人之外,这个解决方案很丑陋而且不具有推广性.如果不是一个id,我有id1,id2和id3,有任意顺序怎么办?

我正在寻找像正则表达式的字符串模板一样优雅的东西,想象:

result = my_regex.match('ABC789ABCQQQQ') % {id: '123'}

有没有办法以类似的方式实现这一目标?

解决方法

好的,我还是找不到内置的解决方案.所以这是一个简单的扩展,实现了一些接近.

class MatchData
  def %(hash)
    string_copy = string.dup
    hash.each do |key,value|
      string_copy[self.begin(key)..self.end(key)] = value
    end
    string_copy
  end
end

my_regex = /ABC(?<id>...)ABC/
puts my_regex.match('ABC789ABCQQQQ') % {id: '123'}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读