替换ruby中括号之间的特定字符
我有一根绳子替换ruby中括号之间的特定字符,ruby,regex,Ruby,Regex,我有一根绳子 str = "'${1:textbox}',[${2:x},${3:y},${4:w},${5:h}]" 我想用一个空格替换[和]之间的所有, 我尝试使用类似 str.gsub!(/(?<=\[)\,*?(?=\])/," ") 有人能解释一下在这种情况下使用的合适的正则表达式技术吗?也许还可以解释一下为什么我上面发布的例子失败了,并且成功了 我使用的是ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0]用一个正则
str = "'${1:textbox}',[${2:x},${3:y},${4:w},${5:h}]"
我想用一个空格替换[
和]
之间的所有,
我尝试使用类似
str.gsub!(/(?<=\[)\,*?(?=\])/," ")
有人能解释一下在这种情况下使用的合适的正则表达式技术吗?也许还可以解释一下为什么我上面发布的例子失败了,并且成功了
我使用的是ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0]用一个正则表达式就可以做到这一点,但即使是这样,我可以保证它的丑陋程度无法形容。使用“嵌套”替换要简单得多-使用一个gsub查找带括号的子字符串,然后使用另一个gsub替换逗号:
str.gsub(/\[.*?\]/) do |substr|
substr.gsub(',', ' ')
end
恐怕我无法解释为什么您的尝试失败了——这两种尝试都不适合我(ruby 1.8.7/irb 0.9.5)。IRB给出的错误含糊地说是“糟糕的regexp语法”。我也不太明白它们应该如何工作(编辑:mu太短了,有一个可怕的细分,请检查)。希望这是有帮助的 用一个正则表达式就可以做到这一点,但即使是这样,我可以保证它的丑陋程度无法形容。使用“嵌套”替换要简单得多-使用一个gsub查找带括号的子字符串,然后使用另一个gsub替换逗号:
str.gsub(/\[.*?\]/) do |substr|
substr.gsub(',', ' ')
end
恐怕我无法解释为什么您的尝试失败了——这两种尝试都不适合我(ruby 1.8.7/irb 0.9.5)。IRB给出的错误含糊地说是“糟糕的regexp语法”。我也不太明白它们应该如何工作(编辑:mu太短了,有一个可怕的细分,请检查)。希望这是有帮助的 此正则表达式:
/(?<=\[)\,*?(?=\])/
你的字符串看起来不像那样,所以你的第一个gsub代码>什么都不做。如果您这样做:
'[,,,,,,]'.gsub(/(?<=\[),*?(?=\])/, " ")
之所以有效,是因为*?
匹配任何内容(当然需要使用换行符和/m
和/s
修饰符),并且字符串中介于[
和]
之间的部分当然可以作为任何内容
如果您正试图制作此:
"'${1:textbox}',[${2:x} ${3:y} ${4:w} ${5:h}]"
然后我将使用嵌套的gsub
方法,这是一种简单而干净的方法。这个正则表达式:
/(?<=\[)\,*?(?=\])/
你的字符串看起来不像那样,所以你的第一个gsub代码>什么都不做。如果您这样做:
'[,,,,,,]'.gsub(/(?<=\[),*?(?=\])/, " ")
之所以有效,是因为*?
匹配任何内容(当然需要使用换行符和/m
和/s
修饰符),并且字符串中介于[
和]
之间的部分当然可以作为任何内容
如果您正试图制作此:
"'${1:textbox}',[${2:x} ${3:y} ${4:w} ${5:h}]"
然后我会使用嵌套的gsub
方法,这是一种简单而干净的方法。您可能会遇到向前看和向后看的问题((?=
和(?@muistooshort-是的。它可以很好地处理向前看,但向后看会阻塞。我猜这是Ruby 1.9的功能。@XavierHolt,非常感谢您提供了这个解决方案。它似乎正是我所需要的,比在尝试更优雅的东西之前循环字符串要简单得多。我从来没有做过nested subs;感谢您的出色技术。已接受。您可能在向前看和向后看((?=
和(?@muistooshort-是的。它可以很好地处理向前看,但向后看会阻塞。我猜这是Ruby 1.9的功能。@XavierHolt,非常感谢您提供了这个解决方案。它似乎正是我所需要的,比在尝试更优雅的东西之前循环字符串要简单得多。我从来没有做过nested subs;感谢您的技巧。接受。您所说的预期输出真的是预期输出吗?如果字符串可以包含嵌套括号,请小心。不使用嵌套括号的解决方案可能不适用于嵌套。我同意@sawa。使用
删除的不仅仅是逗号。您应该使用Xavier Holt的解决方案。@sawa,我刚刚回答了,但它没有出现。无论如何,我想我应该更清楚一点。当我说“预期产出”时,我使用的是
字符来表示预期输出,而不是我实际要查找的输出。很抱歉造成混淆。您所说的预期输出真的是预期输出吗?如果字符串可以包含嵌套括号,请小心。不使用嵌套括号的解决方案可能不适用于嵌套。我同意h@sawa。使用
删除的不仅仅是逗号。你应该使用Xavier Holt的解决方案。@sawa,我刚刚回答了,但没有出现。无论如何,我想我应该更清楚。当我说“预期输出”时,我指的是使用
字符的预期输出,而不是我实际要查找的输出。很抱歉造成混淆。非常感谢您提供的详细信息。非常好地解释了!!投赞成票。非常感谢您提供的详细信息。非常好地解释了!!投赞成票。