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'} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容