Ruby on rails 使用regexp数组转换Ruby w/`gsub`中的字符串
我有一个字符串,我想使用Ruby的Ruby on rails 使用regexp数组转换Ruby w/`gsub`中的字符串,ruby-on-rails,regex,ruby,binding,proc,Ruby On Rails,Regex,Ruby,Binding,Proc,我有一个字符串,我想使用Ruby的gsub和大量的regexp以及它们在数组中的转换结果来转换它 我喜欢这样做: MY_REGEXPS=[ [ /^(\d-\d:)(单|双|三)/, proc{{{$1}{$2.capitalize},”} ], #..许多用于regexp/转换对 ] my_string=“0:0单(线路驱动器,89XD)” MY_REGEXPS.inject(MY_字符串)do| str,regexp_对| str.gsub(regexp\u pair.first和rege
gsub
和大量的regexp以及它们在数组中的转换结果来转换它
我喜欢这样做:
MY_REGEXPS=[
[
/^(\d-\d:)(单|双|三)/,
proc{{{$1}{$2.capitalize},”}
],
#..许多用于regexp/转换对
]
my_string=“0:0单(线路驱动器,89XD)”
MY_REGEXPS.inject(MY_字符串)do| str,regexp_对|
str.gsub(regexp\u pair.first和regexp\u pair.last)
结束
但是,proc没有绑定到gsub匹配的上下文,因此像$1
和$2
这样的变量不可用。我还确认,如果我只是在对gsub的正常调用过程中使用regexp/转换,例如:
my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
"#{$1} #{$2.capitalize},"
end
代码运行得很好
有谁能告诉我一种方法,让我将该进程绑定到gsub的上下文,这样我就可以访问$1
和$2
谢谢也许以下或一种变体可以满足您的需要
MY_REGEXPS = [
[
/^(\p{L}+) (\d:\d) (SINGLE|DOUBLE|TRIPLE) \1/i,
proc { |_,v2,v3| "#{v2} #{v3.capitalize}," }
],
]
my_string = "dog 1:2 single dog (Line Drive, 89XD)"
MY_REGEXPS.inject(my_string) do |s,(re,p)|
p.call(*s.match(re).captures)
end
#=> "1:2 Single,"
我已经包含了捕获组#1
(\p{L}+
(匹配一个或多个字母),以显示如何包含与proc计算无关但仍可传递给proc的捕获组。(此处使用捕获组#1以确保该捕获组的内容再次出现在字符串中的指定位置(\1
) 正则表达式与字符串不匹配:just changedmy_string=“0-0:SINGLE(Line Drive,89XD)”
并且它对我有效:)有些人可能会将其称为一个。你已经把注意力集中在最后一句话的主题上,可能已经失去了你的最终目标,这可能是通过其他方式实现的。我们有时都会被吸进那个洞里。这当然是需要警惕的。非常聪明,基本上和我最终得到的解决方案相同,有一些外部确认很好。谢谢