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,“
“,”,“
更改为”,不适用,不适用,“
“,,,”
更改为“,不适用,不适用,”
”,诸如此类,您好,“
更改为”,诸如此类,不适用,您好,
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,"