【问题标题】:Regex to match all alphanumeric hashtags, no symbols正则表达式匹配所有字母数字主题标签,无符号
【发布时间】:2014-03-06 05:23:23
【问题描述】:

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

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

我希望它匹配 worldm4kingfacexpression(请注意,如果它到达标点符号,我希望它被切断,包括空格)。如果它不包含井号就好了,但它不是超级重要。

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

提前致谢!

【问题讨论】:

    标签: ruby regex hashtag


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:
      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"]
      

      【讨论】:

      • 谢谢!使用第一个版本比使用第二个版本有什么好处吗?看起来第二个要简单得多(我认为比必须展平第一个的性能略高)
      【解决方案3】:

      这是一个更简单的正则表达式#[[: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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 2020-02-09
        • 2013-01-09
        • 2020-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多