我有一个字符串,我想从中删除所有非单词字符和空格。所以我认为正则表达式将是我所需要的。
我的正则表达式看起来像这样(我在字符串类中将它定义为一个方法):
/[\w&&\S]+/.match(self.downcase)
当我在 Rubular 中使用测试字符串运行此表达式时,"hello ..a.sdf asdf..,"
它会突出显示我需要的所有内容(“hellloasdfasdf”),但是当我在 irb 中执行相同操作时,我只会得到“hello”。
有没有人知道为什么会这样?
因为您使用match
, with 返回一个匹配元素。如果你scan
改用,一切都应该正常工作:
string = "hello ..a.sdf asdf..,"
string.downcase.scan(/[\w&&\S]+/)
# => ["hello", "a", "sdf", "asdf"]
\w
表示 [a-zA-Z0-9_]
\S
表示任何非空白字符[a-zA-Z_-0-9!@#$%^&*\(\)\\{}?><....etc]
所以使用\w
and
\S
条件是模棱两可的。
就像在说What is an intersection of India and Asia
。显然,它将是印度。所以我会建议你使用\w+
.
并且您可以使用 scan 来获取第二个答案中提到的所有匹配项:
string = "hello ..a.sdf asdf..,"
string.scan(/\w+/)