gko*_*lan 7 ruby regex twitter hashtag
我正在尝试使用ruby on rails为一个简单的大学项目提取主题标签.我面临的问题是只包含数字的标签和没有空格的标签.
text = "Pack my #box with #5 dozen liquor.#jugs link.com/liquor#jugs #2good #first#second"
Run Code Online (Sandbox Code Playgroud)
我有的正则表达式是/(?:^|\s)#(\w+)/i
(来源)
这个正则表达式返回 #["box", "5", "2good", "first"]
如何确保它只返回#["box", "2good"]
并忽略其余部分,因为它们不是"真正的"主题标签?
Kas*_*ash 10
你能试试这个正则表达式:
/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i
Run Code Online (Sandbox Code Playgroud)
更新1:
在某些情况下,上述正则表达式不匹配:#blah23blah和#23blah23.因此修改了正则表达式以处理所有情况.
正则表达式:
/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i
Run Code Online (Sandbox Code Playgroud)
分解:
(?:\s|^)
- 匹配前面的空格或行的开头.不捕捉比赛.#
- 匹配哈希但不捕获.(?!\d+(?:\s|$)))
- 否定前瞻以避免#和空格(或行尾)之间的所有数字字符(\w+)
- 匹配并捕获所有单词字符(?=\s|$)
- 正面前瞻以确保跟随空间或行尾.这是确保它匹配相邻的有效哈希标记所必需的.修改示例文本以捕获大多数情况:
#blah收拾我与#5#十几#good2白酒3good #box.#壶link.com/liquor#jugs#mkvef214asdwq SD#3E4 FLSD#2good##第一第二#3
火柴:
第1场比赛:第
2
场比赛:第3场
比赛:第2
场比赛4:3 比赛第5场比赛:mkvef214asdwq
比赛6:3e4
比赛7:2好
更新2:
要排除以下划线开头或结尾的单词,只需在否定前瞻中包含您的排除项,如下所示:
/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i
Run Code Online (Sandbox Code Playgroud)
样本,正则表达式和匹配记录在此Rubular链接中
归档时间: |
|
查看次数: |
4494 次 |
最近记录: |