Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换ruby中括号之间的特定字符_Ruby_Regex - Fatal编程技术网

替换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,我刚刚回答了,但没有出现。无论如何,我想我应该更清楚。当我说“预期输出”时,我指的是使用
字符的预期输出,而不是我实际要查找的输出。很抱歉造成混淆。非常感谢您提供的详细信息。非常好地解释了!!投赞成票。非常感谢您提供的详细信息。非常好地解释了!!投赞成票。