正则表达式匹配所有字母数字主题标签,没有符号

时间:2012-09-25 04:57:04

标签: ruby regex hashtag

我正在为facebook编写一个hashtag scraper,我遇到的每个正则表达式都包含标点符号以及字母数字字符。这是我想要的一个例子:

你好#world!我是#m4king #fac_book scraper,想要一个很好的常规#expression。

我希望它与worldm4kingfacexpression匹配(请注意,如果它到达标点符号,我希望它会被切断,包括空格) 。如果它不包含哈希符号会很好,但它并不是非常重要。

请注意,重要的是,我将使用ruby的字符串扫描方法来获取多个标签。

提前感谢大家!

3 个答案:

答案 0 :(得分:6)

这样的正则表达式:#([A-Za-z0-9]+)应该与您需要的匹配并将其放在捕获组中。然后,您可以稍后访问该组。也许this将有助于揭示正则表达式(来自Ruby上下文)。

上面的正则表达式会在找到#标记时开始匹配,并会将任何后续字母或数字抛出到捕获组中。一旦找到任何不是字母或数字的东西,它就会停止匹配。最后,您将得到一个包含您所追求的内容的小组。

答案 1 :(得分:6)

str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression'
str.scan(/#([A-Za-z0-9]+)/).flatten #=> ["world", "m4king", "fac", "expression"]

需要调用#flatten,因为每个捕获组都在自己的数组中。

或者,您可以使用仅在'#'之后匹配字母数字字符的后视匹配:

str.scan /(?<=#)[[:alnum:]]+/ #=> ["world", "m4king", "fac", "expression"]

答案 2 :(得分:2)

这是一个更简单的正则表达式#[[:alnum:]_]/。请注意,它包含下划线,因为Facebook目前包含下划线作为主题标签的一部分(与推特一样)。

str = 'Hello #world! I am #m4king a #fac_book scraper and would like a nice regular #expression'
str.scan(/#[[:alnum:]_]+/)

以下是Rubular的观点: http://rubular.com/r/XPPqwtVGN9