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

Tom*_*oli 5 ruby regex hashtag

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

你好,世界!我是#m4king #fac_book scraper,想要一个很好的常规#expression.

我想它来搭配world,m4king,facexpression(注意,我想它切断如果达到标点符号,包括空格).如果它不包含哈希符号会很好,但它并不是非常重要.

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

谢谢你提前!

npi*_*nti 7

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

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


小智 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"]
Run Code Online (Sandbox Code Playgroud)

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

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

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