使用正则表达式数组转换 Ruby w/ `gsub` 中的字符串
Transforming a string in Ruby w/ `gsub` using an array of regexps
我有一个字符串,我想使用 Ruby 的 gsub
和一大堆正则表达式及其在数组数组中产生的转换进行转换。
我喜欢这样做:
MY_REGEXPS = [
[
/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/,
proc { "#{} #{.capitalize}," }
],
#....Many for regexp/transformation pairs
]
my_string = "0:0 SINGLE (Line Drive, 89XD)"
MY_REGEXPS.inject(my_string) do |str, regexp_pair|
str.gsub(regexp_pair.first, ®exp_pair.last)
end
但是,proc 未绑定到 gsub 匹配的上下文,因此 </code> 和 <code>
等变量不可用。我还确认,如果我只是在正常调用 gsub 的过程中使用 regexp/transformation,例如:
my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
"#{} #{.capitalize},"
end
代码运行良好。
谁能告诉我一种方法,让我将该过程绑定到 gsub 的上下文,以便我可以访问 </code> 和 <code>
?
谢谢
也许以下内容或变体可以满足您的需求。
MY_REGEXPS = [
[
/^(\p{L}+) (\d:\d) (SINGLE|DOUBLE|TRIPLE) /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 计算无关的捕获组,但 MatchData#captures 可以仍然被传递给 proc。 (此处使用捕获组 #1 以确保该捕获组的内容再次出现在字符串中的指定位置 (
))。
我有一个字符串,我想使用 Ruby 的 gsub
和一大堆正则表达式及其在数组数组中产生的转换进行转换。
我喜欢这样做:
MY_REGEXPS = [
[
/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/,
proc { "#{} #{.capitalize}," }
],
#....Many for regexp/transformation pairs
]
my_string = "0:0 SINGLE (Line Drive, 89XD)"
MY_REGEXPS.inject(my_string) do |str, regexp_pair|
str.gsub(regexp_pair.first, ®exp_pair.last)
end
但是,proc 未绑定到 gsub 匹配的上下文,因此 </code> 和 <code>
等变量不可用。我还确认,如果我只是在正常调用 gsub 的过程中使用 regexp/transformation,例如:
my_string.gsub(/^(\d-\d:) (SINGLE|DOUBLE|TRIPLE)/) do
"#{} #{.capitalize},"
end
代码运行良好。
谁能告诉我一种方法,让我将该过程绑定到 gsub 的上下文,以便我可以访问 </code> 和 <code>
?
谢谢
也许以下内容或变体可以满足您的需求。
MY_REGEXPS = [
[
/^(\p{L}+) (\d:\d) (SINGLE|DOUBLE|TRIPLE) /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 计算无关的捕获组,但 MatchData#captures 可以仍然被传递给 proc。 (此处使用捕获组 #1 以确保该捕获组的内容再次出现在字符串中的指定位置 ())。