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

时间:2014-05-23 21:25:03

标签: ruby regex

我有一个字符串:

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

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

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

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

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

3 个答案:

答案 0 :(得分:0)

我从字面上抓取product[products_colors_attributes],然后抓取[并抓取1位数字和]。然后我们匹配线的其余部分,因为我们想要全部替换它。然后在我们的替换中,我们可以使用\1引用我们的捕获数字组。

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

Demo


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

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

Demo

答案 1 :(得分:0)

在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]

答案 2 :(得分:-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]