5

我正在为 facebook 编写一个主题标签抓取工具,我遇到的每个获取主题标签的正则表达式似乎都包含标点符号和字母数字字符。这是我想要的一个例子:

你好世界!我是#m4king 一个#fac_book 刮刀,想要一个不错的正则#expression。

我希望它匹配world, m4king, facand expression(请注意,如果它到达标点符号,我希望它被切断,包括空格)。如果它不包含井号就好了,但这并不是非常重要。

以防万一它很重要,我将使用 ruby​​ 的字符串扫描方法来抓取可能多个标签。

提前致谢!

4

3 回答 3

7

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

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

于 2012-09-25T05:01:33.473 回答
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"]
于 2012-09-25T09:29:21.823 回答
2

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

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

于 2014-03-05T21:23:23.233 回答