是否可以将以下两个正则表达式压缩为一个?
text = File.read('text.txt')
text.gsub(/\s+/, ' ').gsub(/[^a-z ]/, '')
这里的目的是删除:
我试过了:
text.gsub(/[^a-z]\s+/, ' ')
但我仍然看到换行符。
修改
输入
Hi this is cool.
Yes, it's marvelous.
Lovely.
输出
嗨,这很酷,是的,这是非常可爱的
答案 0 :(得分:3)
一个难点在于您尝试执行两项单独的任务:删除字符并压缩空格。如果将它们改为相同则更容易:删除非空格字符或以空格开头的空格。
text.gsub(/((?<=\s)\s|[^a-z ])/i, '')
请注意,这符合您的规定,但不适用于您的示例,因为您将第一个换行符转换为空格(即使它与第二个条件匹配),即使它是非字母数字,您也保留了撇号。 / p>
答案 1 :(得分:1)
您可以尝试:
text.gsub(/[^a-z']+/i, ' ')
但你需要删除前后空格。你可以一次性完成:
text.gsub(/[^a-z']+/i, ' ').strip!
注意:如果要保留大写字母,请不要忘记添加i修饰符。