Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/26.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 - Fatal编程技术网

Ruby 通过多次扫描替换字符串中的单词

Ruby 通过多次扫描替换字符串中的单词,ruby,Ruby,我的目标是将任意两个连续的逗号转换为“”,NA“。这意味着: str=“,,,123,,BLAH,,”更改为,NA,123,NA,BLAH,NA,“ “,”,“更改为”,不适用,不适用,“ “,,,”更改为“,不适用,不适用,” ”,诸如此类,您好,“更改为”,诸如此类,不适用,您好, 字符串中可以有1到100000个逗号,逗号之间可以有任意数量的字符。我的代码是: str = str.gsub!(",,",",NA,") # => ",NA,123,NABLAH,NA" 我遇到了问题,

我的目标是将任意两个连续的逗号转换为“
”,NA“
。这意味着:

  • str=“,,,123,,BLAH,,”
    更改为
    ,NA,123,NA,BLAH,NA,“
  • “,”,“
    更改为
    ”,不适用,不适用,“
  • “,,,”
    更改为
    “,不适用,不适用,”
  • ”,诸如此类,您好,“
    更改为
    ”,诸如此类,不适用,您好,
  • 字符串中可以有1到100000个逗号,逗号之间可以有任意数量的字符。我的代码是:

    str = str.gsub!(",,",",NA,")
    # => ",NA,123,NABLAH,NA"
    
    我遇到了问题,因为它需要发生多次。如果我多次重复
    gsub
    ,我会遇到一个错误
    未定义的方法gsub!对于nil类
    ,因为
    gsub
    返回结果,但如果没有替换,则返回
    nil

    ruby > ",,,,,,,,,,,,,,,,,,,,,,".gsub(",",",NA")
    => ",NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA" 
    
    或者:

     ruby > ",,,,,,,,,,,,,,,,,,,,,,".gsub(",","NA,")
     => "NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA," 
    
    编辑:为了更好地处理用例(没有完全理解原始问题):


    根据您的用例(“,,,123,,BLAH,,,”变成“,,NA,123,NA,BLAH,NA,”),我假设您想要all字符之间的逗号变成,NA

    使用带有gsub的正则表达式很容易做到这一点

    str=",,,123,,BLAH,,"
    str.gsub!(/,+/,",NA,") #returns ",NA,123,NA,BLAH,NA,"
    

    正则表达式
    /,+/
    正在匹配“一个或多个”逗号

    ,感谢您的响应,但这不适用于这种情况:“,,,,,,,,,,,,”。它留给我的是:“,NA,NAhi,NA”(注意hi和NA之间缺少空格)奇数逗号怎么办,就像你的第一个例子,它有三个?你改变了问题,然后,面对要求澄清的新评论,你立即选择答案???此外,选择答案会导致“,”.gsub(“,”,“NA,”)#=>“NA,NA”,这与您的问题更新相矛盾!否决票和结束票是我的,因为问题还不清楚。这方面有初步证据。您说过每对逗号都要转换为
    ,NA,
    。我们可以将其应用到的最简单的字符串是
    '、'
    (仅两个逗号),它应该变成
    '、NA'
    ,但您选择的答案并没有做到这一点。Cary,我在原始代码中包含的注释(在代码块内)指定我不知道该字符串的外观。后来,我在代码中添加了更新部分,使其更加明显。如果我把你弄糊涂了,我道歉。
    str=",,,123,,BLAH,,"
    str.gsub!(/,+/,",NA,") #returns ",NA,123,NA,BLAH,NA,"