【问题标题】:Is there a faster way to parse hashtags than using Regular Expressions?有没有比使用正则表达式更快的方法来解析主题标签?
【发布时间】:2012-12-04 00:06:11
【问题描述】:

我很好奇,除了使用正则表达式(主要在 Ruby 中)之外,还有更快/更好的方法来解析字符串中的主题标签吗?

编辑
例如,我想解析字符串This is a #hashtag, and this is #another one! 并获取单词#hashtag#another。我正在为我的正则表达式使用#\S+

【问题讨论】:

  • 您目前使用的是什么正则表达式?另外,我怀疑有更快的方法。正则表达式操作由 MRI 优化,因为它们使用大量 C 代码。
  • 你想达到什么目的?
  • 那在我看来绝对合法。想不出更简单的变体。
  • 你想用它做什么?你想把一些值放到字符串中吗?

标签: ruby-on-rails ruby regex hashtag


【解决方案1】:

你没有显示任何代码(你应该有)所以我们猜测你是如何使用你的正则表达式的。

#\S+ 是您需要的最佳模式,但scan 可能是检索字符串中所有匹配项的最佳方式。

'This is a #hashtag, and this is #another one!'.scan(/#\S+/)
=> ["#hashtag,", "#another"]

如果你不想解析逗号,它应该是/\B#\w+/

是的,我同意。 /\B#\w+/ 更有意义。

【讨论】:

  • 那个正则表达式不正确。如果我有字符串:google.com#tag 它会拉出#tag,这实际上不是一个哈希标签。正则表达式应该是:\B#\S+
  • \B 是做什么的? @MikeSilvis
  • 如果你不想解析逗号,它应该是/\B#\w+/
【解决方案2】:

也许

嗯,想法......

  • 您可以尝试s.split('#'),然后也许只将正则表达式应用于实际的主题标签 s.split('#').drop(1).map { |x| x[/\w+/] } --- 它可能更快也可能不会更快,但它显然更丑
  • 您可以编写一个提取主题标签的 C 扩展程序
  • 您可以分析您的程序,看看它是否真的需要针对这种情况进行任何优化。

【讨论】:

    猜你喜欢
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多