我想要一个匹配函数,它返回带有句点或破折号的单词(可能还有一个不断增长的列表)。我在想:
b="here a.b are things a.d long-thing others".scan(/\.|-/)
可以返回["a.b","a.d","long-thing"]
而不是[".",".","-"]
的数组。
我如何告诉扫描返回整个单词?
答案 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? strong>
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"]