我想捕获所有单词字符,忽略给定字符串中的空格。
str = "Hello there how are you?"
我希望结果是:
"Hellotherehowareyou"
我试过:
str[/(w*)*/]
# => "Hello"
。但它只返回第一个单词。如何捕获所有单词字符?
怎么了
str[/(w*)*/]
返回一个子字符串,而不是扫描整个字符串以查找匹配项或删除不需要的字符。最好使用其他 String 方法之一,如 #gsub、#tr、#delete、#scan 或 #match,具体取决于您的真实意图是什么。
使用字符属性或类
如果您正在寻找一个强大的解决方案,Ruby 字符属性或 POSIX 字符类可能是您的最佳选择。若要获取在原始帖子中提供的结果,可以使用 Unicode 感知p{Alpha}
属性。例如:
str.scan(/p{Alpha}/).join
#=> "Hellotherehowareyou"
或者,如果您只想删除空格和问号,并且您不关心其他类型的字符,那么 String#delete 可能足以满足您的特定语料库。
str.delete ' ?'
#=> "Hellotherehowareyou"
如果您需要一种更复杂的方法来选择或拒绝字符流中的元素,您甚至可以执行以下操作:
str.chars.select { _1 =~ /p{Alpha}/ }.join
#=> "Hellotherehowareyou"
当然还有其他方法。KISS和YAGNI原则可能适用。同时,根据代码的可读性和语义意图选择解决方案,因为对于特定示例,大多数解决方案都会产生非常相似的结果。