Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 有没有办法用gsub替换字符串中的一系列字符?_Ruby_Regex - Fatal编程技术网

Ruby 有没有办法用gsub替换字符串中的一系列字符?

Ruby 有没有办法用gsub替换字符串中的一系列字符?,ruby,regex,Ruby,Regex,我想用“#”替换除最后4个字符之外的所有字符,就像你在信用卡账单上看到的那样。我使用数组#each方法迭代索引[0..-4],然后对[-4..-1]迭代另一个方法,并将这两个方法的结果合并到一个新字符串中。我在想也许用regex做这个更好?但我对regex还不熟悉,谷歌还没有找到任何我可以用来替换整个范围而不丢失字符串长度的方法。我试过了 str.gsub(str[0..-5],'#') (和其他一些东西)但它用一个字符替换整个范围。如何使用regex实现我的目标?是的,这在regex中是可能

我想用“#”替换除最后4个字符之外的所有字符,就像你在信用卡账单上看到的那样。我使用数组#each方法迭代索引[0..-4],然后对[-4..-1]迭代另一个方法,并将这两个方法的结果合并到一个新字符串中。我在想也许用regex做这个更好?但我对regex还不熟悉,谷歌还没有找到任何我可以用来替换整个范围而不丢失字符串长度的方法。我试过了

str.gsub(str[0..-5],'#')

(和其他一些东西)但它用一个字符替换整个范围。如何使用regex实现我的目标?

是的,这在regex中是可能的

> "12345678".gsub(/.(?=.{4})/, "#")
=> "####5678"
> "12345678901234".gsub(/.(?=.{4})/, "#")
=> "##########1234"
说明:

(=.{4})
仅当字符后跟至少四个字符时才匹配该字符。因此,它匹配除最后四个字符以外的所有字符,因为从最后一个字符开始,第四个字符后面跟着3个字符,而不是4个字符。因此它无法匹配最后一个字符的第四个字符。同样,第三、第二、第一个字符(从最后一个字符开始)

> "12345678901234".gsub(/(?!.{1,4}$)./, "#")
=> "##########1234"

Sweeeeet!!!!工作起来很有魅力。现在我只需要把它拆开,了解它在做什么,谢谢!!!我会在几分钟内将此标记为答案,以便允许我;)@我很高兴地解释了一下。我想我添加的解释会对你有帮助。Avinash,(一般来说)当要求或要求一个正则表达式的解释时,考虑使用“扩展”选项单独写正则表达式(<代码> r=…/x),这样你就可以用注释来解释每一个元素——在一个单独的行上。这对你来说很快,对读者来说也很清楚。太棒了。再次感谢@Avinash Raj…这个演示太棒了!