ruby – 如何从文本中删除非字符?

前端之家收集整理的这篇文章主要介绍了ruby – 如何从文本中删除非字符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想“这是一个101测试”是“这是一个测试”,但我不能得到正确的语法.
src = 'This Is A 101 Test'
puts "A) " + src                       # base => "This Is A 101 Test"
puts "B) " + src[/([a-z]+)/]           # only does first word => "his"
puts "C) " + src.gsub!(/\D/,"")       # Does digits,I want alphabetic => "101"
puts "D) " + src.gsub!(/\W///g)        # Nothing. => ""
puts "E) " + src.gsub(/(\W|\d)/,"")   # Nothing. => ""

解决方法

首先,你需要注意gsub和gsub!后者是“危险的”并将修改src的值.如果您要按顺序执行这些语句,请注意,a.gsub!(/ a /,“b”)和a = a.gsub(/ a /,“b”)都会同样的做法.您的代码的一部分问题是src正在被修改.

B方法返回“他”,但不会更改源

src[/([a-z]+)/]     # => "his"
src                 # => "This Is A 101 Test"

C方法删除不是数字的所有字符:

src.gsub!(/\D/,"") # => "101"
src                 # => "101"

D方法不起作用,因为语法错误. gsub方法接受正则表达式/字符串进行搜索,然后使用用于替换的字符串.如果你尝试在IRB,它会像你需要另一个/某个地方一样.

E方法替换所有非字词和所有数字:

src.gsub(/(\W|\d)/,"") # => "This Is A  Test" (note the two spaces)
src                     # => "This Is A 101 Test"

你指出它正在返回“”.那么实际发生的是列出的C和D(修正了语法问题)是破坏性的变化. (另外,如果在“101”上运行,D将实际返回为零,因为没有进行任何替换.)所以E只是在“101”上运行,并且由于您用“”替换所有非单词和所有数字,它变成“101”.

你正在寻找的答案将是:

src.gsub!(/\d\s?/,"") # => "This Is A Test"
src                    # => "This Is A Test"

和我最喜欢的处理双重空间的所有场景(因为挤压是非常有效的组合像角色,条带是非常有效的剥离尾随的空格,而那些!返回没有,如果他们没有替换):

src = src.gsub(/\d+/,"").squeeze(" ").strip

猜你在找的Ruby相关文章