1

我有一个字符串,我想从中删除所有非单词字符和空格。所以我认为正则表达式将是我所需要的。

我的正则表达式看起来像这样(我在字符串类中将它定义为一个方法):

/[\w&&\S]+/.match(self.downcase)

当我在 Rubular 中使用测试字符串运行此表达式时,"hello ..a.sdf asdf..,"它会突出显示我需要的所有内容(“hellloasdfasdf”),但是当我在 irb 中执行相同操作时,我只会得到“hello”。

有没有人知道为什么会这样?

4

2 回答 2

3

因为您使用match, with 返回一个匹配元素。如果你scan改用,一切都应该正常工作:

string = "hello ..a.sdf asdf..,"
string.downcase.scan(/[\w&&\S]+/)
# => ["hello", "a", "sdf", "asdf"]
于 2014-05-13T09:53:00.257 回答
1

\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+/)
于 2014-05-13T10:20:08.180 回答