我正在尝试在字符串中查找所有哈希标记.这些主题标签来自像twitter这样的流,它们可以在文本中的任何位置,如:
这是一个#awesome事件,让我们使用标签#fun
我正在使用.NET框架(c#),我认为这将是一个合适的正则表达式模式:
#\ w +
这是为此目的最好的正则表达式吗?
arc*_*ain 39
如果您从Twitter中提取包含主题标签的状态,则不再需要自己查找.您现在可以指定include_entities参数,让Twitter自动调出提及,链接和主题标签.
例如,请按以下调用状态/ show:
http://api.twitter.com/1/statuses/show/60183527282577408.json?include_entities=true
在结果JSON中,注意实体对象.
"entities":{"urls":[{"expanded_url":null,"indices":[68,88],"url":"http:\/\/bit.ly\/gWZmaJ"}],"user_mentions":[],"hashtags":[{"text":"wordpress","indices":[89,99]}]}
Run Code Online (Sandbox Code Playgroud)
您可以使用上面的内容来定位推文中的特定实体(发生在由indices属性表示的字符串位置之间)并适当地转换它们.
如果您只需要正则表达式来定位主题标签,Twitter就会在开源库中提供这些标签.
(^|[^&\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7])(#|\uFF03)(?!\uFE0F|\u20E3)([\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*[\p{L}\p{M}][\p{L}\p{M}\p{Nd}_\u200c\u200d\ua67e\u05be\u05f3\u05f4\u309b\u309c\u30a0\u30fb\u3003\u0f0b\u0f0c\u00b7]*)
Run Code Online (Sandbox Code Playgroud)
上述模式可以从这个 java文件拼凑在一起(检索2015-11-23).此模式的验证测试位于第128行的此文件中.
Kev*_*ark 28
在看完之前的答案并制作一些测试推文以了解Twitter喜欢什么之后,我想我已经想出了一个可靠的正则表达式.它需要正则表达式引擎中的环视功能,因此它可能不适用于所有引擎.它应该仍适用于.NET和PCRE.
(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)
根据RegexBuddy的说法,这可以做到以下几点:

再说一遍,根据RegexBuddy的说法,这就是它的匹配:

突出显示的任何内容都是比赛的一部分.较暗的突出显示部分表示从捕获返回的内容.
编辑2014年12月:
这是一个来自zero323的略微简化的版本,应该在功能上等同:
(?<=\s|^)#(\w*[A-Za-z_]+\w*)
这取决于你是否想在其他字符串中匹配主题标签("Some#Word")或可能不是主题标签的内容("我们是#1").你给出的正则表达式#\w+在这两种情况下都是匹配的.如果稍微修改你的正则表达式\B#\w\w+,你可以消除这些情况,只匹配字边界长度大于1的主题标签.
我在推特上发布了一个带有随机放置的哈希标签的字符串,看看 Twitter 对它做了什么,然后尝试将它与正则表达式进行匹配。这是我得到的:
\B#\w*[a-zA-Z]+\w*
#face #Fa !ce 一些东西#iam #1 #1 #919 #jifdosaj somethin#idfsjoa 9#9#98 9#9f9j#9jlasdjl #jklfdsajl34 #34239 #jkf #a *#1j3rj3
| 归档时间: |
|
| 查看次数: |
29940 次 |
| 最近记录: |