如何在Ruby中扫描并返回一组包含特定字符的单词

时间:2015-12-16 18:02:35

标签: ruby regex

我想要一个匹配函数,它返回带有句点或破折号的单词(可能还有一个不断增长的列表)。我在想:

b="here a.b are things a.d long-thing others".scan(/\.|-/)

可以返回["a.b","a.d","long-thing"]而不是[".",".","-"]的数组。

我如何告诉扫描返回整个单词?

2 个答案:

答案 0 :(得分:4)

对于您的问题以及您更新的问题和未来更新的问题,我使用了split和grep regexp之类的内容。

正则表达式版本(条件是最后没有.-

"here a.b are things a.d long-thing others a.b.c a.c-things".scan(/\S+[.-]\S+/)

#split,#select和regexp

 s = "here a.b are things a.d long-thing others a.b.c a.c-things"
 s.split(" ").select { |el| el[/[.-]/] }

#split,#select,#include?

 s.split(" ").select { |el| el.include?(".") || el.include?("-") }

可以通过将el发送到您决定所有逻辑的函数来修改最后一个。现在它捕获了很多垃圾,但是你需要修复它。

此致

答案 1 :(得分:3)

您还需要在正则表达式中包含单词字符。例如,通过向正则表达式添加\w+,这意味着:至少有一个单词字符:

b = "here a.b are things a.d long-thing others"
b.scan(/\w+[.-]\w+/)
#=> ["a.b", "a.d", "long-thing"]