使用正则表达式和gsub从字符串中仅删除方括号内的文本

3
text = "This [is] a [fill]-in-the-[blank]"

我正在寻找一个正则表达式,让我可以进行一些神奇的操作:
new_text = text.gsub(/[magic happens]/, "")

=> "This [] a []-in-the-[]"

我的代码是Ruby,但我敢打赌这并不重要。

3个回答

6

类似这样的代码可以正常工作:

text = "This [is] a [fill]-in-the-[blank]"
text.gsub(/\[.+?\]/, '[]')
#=> "This [] a []-in-the-[]"

哈哈.. 这是一个很好的答案。我一定会点赞,但我觉得我应该等一下看看是否有更好的答案。如果没有,我会修改问题并给你绿色的勾选标记。 - vlasits
2
请参考Sawa的答案,使用您的模板来完成。我认为使用更简单的正则表达式会使它更易于阅读! - Paul Prestidge
我同意。我会使用你的答案,但我会接受他的。看起来你将赢得点赞战。 :) - vlasits

3
text = "This [is] a [fill]-in-the-[blank]"

text.gsub(/(?<=\[).+?(?=\])/, "")

或者

text.gsub(/(?<=\[)[^\]]+?(?=\])/, "")

2

我使用Rubular来原型化这个,根据你的测试用例->http://rubular.com/r/TgdjOtc4Ru从这里,你可以删除匹配项或类似的内容:

[5] pry(main)> text = "This [is] a [fill]-in-the[blank]"
=> "This [is] a [fill]-in-the[blank]"
[6] pry(main)> text.gsub(/\[(\w+)\]/) { |match| "[]" }
=> "This [] a []-in-the[]"

可能有更好的方法来做到这一点 :-)


可以,Ron。但是我也想让括号内的空格匹配。虽然这不在我的示例中,但这是正确的。 - vlasits
我建议你在未来的正则表达式原型设计中使用我提供的工具。虽然你可以使用 Ruby REPL(如 pry 或 irb),但这些专门的正则表达式工具通常有一些额外的好处,可以帮助我更快地找出自己想要做什么。 - user1898811
谢谢,Ron。我实际上使用了Rubular。我找到了如何精确匹配我所需的内容。但由于使用了前瞻和后顾(而不是你和Chron使用的更易读的方式)留下了[],我卡住了。直到Sawa演示了它,我才知道如何做。 - vlasits
1
我刚好需要和你一样的解决方案(哈哈,一千年后),@vlasits!只是为了记录一下:https://rubular.com/r/narcp8Nvzwd8dz - richardsonwtr
不错!很高兴听到我的旧问题帮助了某人得到新的解决方案。 - vlasits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接