繁体   English   中英

Ruby:如何用字符串中的正则表达式匹配替换字符串?

[英]Ruby: How to replace string with regex match in string?

我有一个字符串:

a = "product[products_colors_attributes][1400877739750][variants_attributes][0]"

我想获取字符串的1400877739750部分并将其用于a的新值

a = "product[products_colors_attributes][1400877739750][variants_attributes][0]"

a.sub!("product[products_colors_attributes][1400877739750][variants_attributes][0], ???)

a #<-- variants[1400877739750][size]

我从字面上抓住product[products_colors_attributes] ,然后是[并捕获1个以上的数字和] 然后我们匹配该行的其余部分,因为我们要替换掉所有的行。 然后在替换中,我们可以使用\\1引用捕获的数字组。

product\[products_colors_attributes\]\[(\d+)\].*
variants[\1][size]

演示版


另外,我也不精通Ruby,但是查找数字并使用匹配项创建新字符串而不是使用替换可能更容易。 在这里,我先行查找(但不匹配) product[products_colors_attributes][ ,然后匹配1个以上的数字。 我们可以使用此match的值创建一个新字符串(伪代码: a = "variants[" . match . "][size]"; )。

(?<=product\[products_colors_attributes\]\[)(\d+)

演示版

在Ruby中:

a = "product[products_colors_attributes][1400877739750][variants_attributes][0]"

id_regex = /product\[products_colors_attributes\]\[(\d+)\].*/
id = a[id_regex, 1]

new_a = "variants[#{id}][size]"

备用语法:

match = id_regex.match(a)
id = match[1]
str = "product[products_colors_attributes][1400877739750][variants_attributes][0]"
md = str.match(/\d+/)
str = "variants[#{md[0]}][size]" if md

puts str

--output:--
variants[1400877739750][size]

要么:

str = "product[products_colors_attributes][1400877739750][variants_attributes][0]"

pieces = str.split("][")
number = pieces[1]

str = "variants[#{number}][size]"
puts str

--output:--
variants[1400877739750][size]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM