使用 ruby​​ 的正则表达式来匹配句子中的主题标签

2024-04-25

我正在尝试使用 ruby​​ on Rails 为一个简单的大学项目提取主题标签。我面临着仅包含数字的标签和没有空格的标签的问题。

text = "Pack my #box with #5 dozen liquor.#jugs link.com/liquor#jugs #2good #first#second"

我的正则表达式是/(?:^|\s)#(\w+)/i (source https://stackoverflow.com/questions/1796763/regular-expression-to-match-a-pattern-either-at-the-beginning-of-the-line-or-aft)

这个正则表达式返回#["box", "5", "2good", "first"]

如何确保它只返回#["box", "2good"]并忽略其余部分,因为它们不是“真正的”主题标签?


你能试试这个正则表达式吗:

/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i

更新1:
在某些情况下,上述正则表达式不会匹配,例如:#blah23blah 和 #23blah23。 因此修改了正则表达式来处理所有情况。

Regex:

/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i

分解:

  • (?:\s|^)--匹配前面的空格或行首。才不是 捕捉比赛。
  • #--匹配哈希但不捕获。
  • (?!\d+(?:\s|$)))--负向预测以避免所有数字字符 # 和空格(或行尾)之间
  • (\w+)--匹配并捕获所有单词字符
  • (?=\s|$)--正向前视以确保以下空格或结尾 线。这是为了确保它与相邻的有效哈希标签匹配所必需的。

修改示例文本以捕获大多数情况:

#blah 在我的#盒子里装上#5打#good2 #3好酒。#jugs link.com/liquor#jugs #mkvef214asdwq sd #3e4 flsd #2good #first#second #3

Matches:

第1场比赛:废话
比赛2:盒子
比赛3:好2
第 4 场比赛:3 好
比赛 5:mkvef214asdwq
比赛 6: 3e4
第 7 场比赛:2 好

红柱状链接 http://www.rubular.com/r/MD6avgvV05

更新2:

要排除以下划线开头或结尾的单词,只需将排除项包含在否定前瞻中,如下所示:

/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i

样本、正则表达式和匹配记录在此红柱状链接 http://www.rubular.com/r/PySQB8NvUY

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ruby​​ 的正则表达式来匹配句子中的主题标签 的相关文章

  • 在 Ruby 中, put 方法应用到哪个对象?

    在 ruby 中 您使用点来调用方法 或者换句话说 将方法发送到所处理的对象 100 to i 我们正在向对象 100 发送消息 to i 当我们这样做时 puts hello put 方法应用于哪个对象 我是这样想的 self puts
  • 我们可以从视图调用控制器的方法(理想情况下我们从助手调用)吗?

    在 Rails MVC 中 您可以从视图调用控制器的方法 因为方法可以从助手调用 如果是 怎么办 答案如下 class MyController lt ApplicationController def my method Lots of
  • 用于解析网页链接的正则表达式?

    我正在寻找一个 NET 正则表达式来从网页中提取所有 URL 但还没有找到一个足够全面的表达式来涵盖指定链接的所有不同方式 还有一个附带问题 有没有一个正则表达式来统治它们 或者我最好使用一系列不太复杂的正则表达式 并且只对原始 HTML
  • 在 Ruby 中,如何生成一长串重复文本?

    在 ruby 中快速生成长字符串的最佳方法是什么 这有效 但速度非常慢 str length 100000 1 length each i str 0 我还注意到 创建一个适当长度的字符串 然后将其附加到现有字符串直至所需的长度 速度会更快
  • Javascript时间转换正则表达式

    我有一种使用 Net 中的正则表达式来转换时间的方法 例如 1h 20m 格式为双倍 就这个 public static double GetTaskHours this string tmpHours Double taskHours 0
  • 设置正则表达式中的最小和最大字符

    我写了一个正则表达式 http en wikipedia org wiki Regular expression匹配任意数量的字母 字母之间有任意数量的单个空格 我希望该正则表达式也强制执行最小和最大字符数 但我不确定如何做到这一点 或者是
  • 在 Emacs ruby​​ 模式下使用制表符缩进而不是空格

    我一直在尝试配置 Emacs 以便在缩进 Ruby 代码时插入一个 制表符 而不是一系列 空格 到目前为止 我已经尝试设置 varruby indent tabs mode to t这样 根据文档 它将 如果非零 则在 ruby 模式下插入
  • 对于 testunit 或其他 nunit 风格框架来说,什么才是好的失败消息?

    在 Ruby 的 test unit 和其他此类 nunit 风格框架中 什么才是好的失败消息 失败消息是否应该仅仅描述预期值与预期值不匹配的情况 assert match hey hey this is a test The word d
  • 连接后带有 Less/Greater 的Where 子句

    我正在尝试结合一个joins with a where条款 但where子句不是测试相等 而是测试大于或等于 我知道在标准 where 子句中 我可以这样做 Group where vote deadline at lt Time now
  • PHP:查找所有以“:”开头的单词

    你能帮我用 PHP 函数 正则表达式在给定的文本中找到所有以字符 开头的单词吗 换句话说 所有以 开头并用 空格 分隔的子字符串 Since word应该可能是有效的 我想 word another应该算两个词 那么你就不能说总有一个空格
  • 如何获得“irb(main):001:0>”提示而不是“>>”

    我的 Mac 上预装了 Ruby 所以我想看看它 我注意到的第一件事是 irb 提示 gt gt 而不是 irb main 001 0 gt 我找不到任何关于如何通过 Google 更改此设置的信息 因为每个人都在其代码中使用 irb ma
  • 迁移后删除轨道模型

    我觉得很奇怪 创建模型 运行迁移 销毁它 然后再次创建相同的模型会报告 SQL 异常 project master rails g model name name invoke active record create db migrate
  • 在 tweetinvi 中查找推文的 tweetID

    我对 C 编程相对较新 为学校项目自学 并决定尝试使用 TweetInvi 来实现 Twitter 功能 到目前为止 一切进展顺利 身份验证和发布已启动并运行 但我正在努力找出如何使用 DestroyTweet 方法 它和许多其他方法都需要
  • 正则表达式贪心问题 (C#)

    我有一个像 text 和 text 这样的输入字符串 我想用相应的 html 标签替换 wiki 语法 input text and text 理想的输出 h1 text and h1 text 但使用以下代码我得到以下输出 var reg
  • 以与版本页面上相同的方式区分两个字符串的算法是什么?

    我正在尝试按短语区分两个字符串 类似于 StackOverflow 在版本编辑页面上区分两个字符串的方式 执行此操作的算法是什么 是否有 gems 或其他标准库可以实现此目的 编辑 我见过其他比较算法 Differ http github
  • 使无头浏览器停止加载页面

    我正在使用 watir webdriver ruby gem 它启动浏览器 Chrome 并开始加载页面 页面加载速度太慢 watir webdriver 引发超时错误 如何让浏览器停止加载页面 require watir webdrive
  • Java 中修剪字符串的可能前缀

    I have String str 我想从中提取不包括可能的前缀的子字符串 abc 我想到的第一个解决方案是 if str startsWith abc return str substring abc length return str
  • [a-zA-Z] 的正则表达式

    我有一个仅匹配英文字母的正则表达式 a a zA Z 字符类 有没有内置的正则表达式 我的意思是像 s or w 您正在要求一个速记班 http www regular expressions info shorthand html对于英文
  • 如何使用 cURL(或任何命令行工具)通过 OAuth 身份验证将 HTTP Post 发送到 Twitter?

    我希望使用命令行应用程序 例如cURL http en wikipedia org wiki CURL cURL 在我的测试 Twitter 帐户上发布一些测试帖子 我也希望通过 OAuth 身份验证来做到这一点 我怎样才能做到这一点 假设
  • tweepy 计数限制为 200?

    我目前正在尝试检索一些拥有大量关注者的大帐户的关注者 我正在使用 Tweepy 和这段代码 带光标 follower cursors tweepy Cursor api followers id id var count 5000 for

随机推荐

  • 如何使用 Azure Active Directory Graph API 获取属于 AppRole 的所有用户

    我一生都无法弄清楚如何查询 Azure Active Directory 的图形 API 来获取属于特定 AppRole 的所有用户 首先我尝试了类似的东西 client Users Where u gt u AppRoleAssignme
  • 如何防范资源耗尽等漏洞?

    我们碰巧使用IBM appscanhttp www 01 ibm com software awdtools appscan http www 01 ibm com software awdtools appscan 针对我们的 java
  • 仅使用 CSS 切换手风琴字形图标

    嗯 我有一个手风琴菜单 我想更改字形图标 我找到了一些询问同样问题的人的答案 但我发现没有答案适用于我的 可能是因为我不知道在哪里应用代码 我在 Jsfiddle 中的菜单 http jsfiddle net 3wt0ehcj http j
  • 连接从左到右 (LTR) 和从右到左 (RTL) 文本

    似乎使用组合从左到右 LTR 和从右到左 RTL 文本paste可能会产生意想不到的结果 x paste c green collapse arabic for blue and red gt 1 green paste x yellow
  • Java If(false) 编译

    我正在使用 Tomcat 开发一个动态 Web 项目 有一个全局标志很有用 这是我在开发服务器和部署服务器之间唯一需要更改的东西 该标志的最大用途是与打印语句一起使用 public class Debug public final stat
  • 安卓定时器问题

    您好 我正在构建一个应用程序 它将在固定的时间段 例如每 30 分钟 执行一段代码 我希望这个时间段是严格的 我的意思是我希望保证该时间段为 30 分钟而不是 28 分钟 或者每当操作系统想要执行它时 我有一个 Timer 对象并按如下方式
  • 如何在本机反应中使用高度自动?

    在浏览器中 可以指定图像的宽度 并且可以将高度设置为自动 这将使图像在绑定到指定宽度的同时保留宽高比 高度和长宽比均事先未知 我怎样才能在本机反应中做同样的事情 Height 属性只能接受数字值 解决方法 得到Dimensions模块来自r
  • 如何展平嵌套 JSON

    尝试将嵌套的 json 响应从 2 层深度压平到 1 层 这是我在 Go Playground 上的工作代码 http play golang org p kHAYuZUTko http play golang org p kHAYuZUT
  • 找出 2 个日期之间的月数

    select age 2012 11 30 00 00 00 timestamp 2012 10 31 00 00 00 timestamp age 2012 12 31 00 00 00 timestamp 2012 10 31 00 0
  • 将MapPageRoute添加到asp.net mvc项目后,站点停止进入Home Controller

    我正在尝试在我的 asp net mvc 项目中路由 aspx Webforms 页面 我在 global asax 中注册该页面 routes IgnoreRoute resource axd pathInfo routes MapPag
  • 如何使用 VS Code 浏览器进行导航

    这是一个关于 VS Code 资源管理器窗口导航的问题 在 Windows 资源管理器应用程序中 我可以立即导航到我选择的任何文件 如果 Windows 资源管理器窗口以升序名称顺序显示我的文件夹或文件 我可以通过键入我要查找的文件 文件夹
  • 获取 angular2 中表单的所有值

    我可以使用以下代码获取表单的值
  • 查找集合列表中不相交集合对的数量

    问题陈述如下 给定一个包含 n 个集合的列表 每个集合包含 k 个整数 找到不相交集合对的数量 假设集合的可能元素为正 且上界为 c gt n 并且假设 k 我试图想出一种有效的算法来比 O kn 2 更快地解决这个问题 这是简单解决方案的
  • 使用java将当前GMT时间转换为CST时区

    我正在尝试使用 JDK8 将当前 GMT 时间转换为 CST 时间 但我的代码总是为两个时区返回相同的时间 我还验证了 getAvailableIDs 具有 CST Calendar cal Calendar getInstance Tim
  • ASP.NET WebForms:短路验证

    我有一个正在验证的网格文本框
  • Django AJAX JSON 响应在浏览器中显示为原始文本

    我正在 Pinax 框架内使用 Django 1 4 2 开发一个 Stripe Web 应用程序 django stripe 付款 艾尔达瑞安 阿贾克斯 我已经一切正常 除了 ajax 响应 JSON 格式 似乎没有被任何 ajax 回调
  • 将聚合查询结果映射到 hibernate 对象

    是否可以将聚合查询的结果映射到 hibernate 支持的域对象中的字段 例如 如果我有一个如下所示的 Car 对象 Entity public class Car Id private int id Column private Stri
  • iOS - 本地通知 - cancelAllLocalNotifications

    可能是一个简单的问题 当我调用 cancelAllLocalNotifications 时 它是仅取消该应用程序创建的通知还是也会取消来自其他应用程序的所有通知 其他应用程序创建的通知不会受到影响 From 本地和推送通知编程指南 http
  • 最好的“忘记密码”方法是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 忘记密码 实现忘记密码功能的最佳方法是什么 https stackoverflow com questions 522967 forgot password what is the best meth
  • 使用 ruby​​ 的正则表达式来匹配句子中的主题标签

    我正在尝试使用 ruby on Rails 为一个简单的大学项目提取主题标签 我面临着仅包含数字的标签和没有空格的标签的问题 text Pack my box with 5 dozen liquor jugs link com liquor