将两个正则表达式压缩为一个

时间:2014-04-02 14:53:49

标签: ruby regex

是否可以将以下两个正则表达式压缩为一个?

text = File.read('text.txt')
text.gsub(/\s+/, ' ').gsub(/[^a-z ]/, '')

这里的目的是删除

  1. 除单个空格外的所有空格字符。
  2. 除了撇号之外,所有的a-to-z charace都没有。
  3. 我试过了:

    text.gsub(/[^a-z]\s+/, ' ')
    

    但我仍然看到换行符。

    修改

    输入

    Hi    this is cool.
    Yes, it's marvelous. 
    
    Lovely.
    

    输出

      

    嗨,这很酷,是的,这是非常可爱的

2 个答案:

答案 0 :(得分:3)

一个难点在于您尝试执行两项单独的任务:删除字符并压缩空格。如果将它们改为相同则更容易:删除非空格字符或以空格开头的空格。

text.gsub(/((?<=\s)\s|[^a-z ])/i, '')

请注意,这符合您的规定,但不适用于您的示例,因为您将第一个换行符转换为空格(即使它与第二个条件匹配),即使它是非字母数字,您也保留了撇号。 / p>

答案 1 :(得分:1)

您可以尝试:

text.gsub(/[^a-z']+/i, ' ')

但你需要删除前后空格。你可以一次性完成:

text.gsub(/[^a-z']+/i, ' ').strip!

注意:如果要保留大写字母,请不要忘记添加i修饰符。