Ruby:如何捕获所有字符,忽略空格?



我想捕获所有单词字符,忽略给定字符串中的空格。

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原则可能适用。同时,根据代码的可读性和语义意图选择解决方案,因为对于特定示例,大多数解决方案都会产生非常相似的结果。

最新更新