正则expression式的Twitter用户名

你能提供一个匹配Twitter用户名的正则expression式吗?

如果提供了Python示例,则额外奖励。

(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9]+) 

我用这个,因为它忽略了电子邮件

这里是一个示例鸣叫

 @Hello how are @you doing, email @000 me @ whats.up@example.com @shahmirj 

拾起:

 @Hello @you @shahmirj 

它也将工作的哈希标记,我使用相同的expression与@改为#

我有一个博客条目,我不断更新它的@ http://shahmirj.com/blog/extracting-twitter-usertags-using-regex确保比较,只是在我发现了一个bug:D

这是正确的,我只是在那里偷偷摸摸的:D

如果你正在谈论他们在twitter上使用的@username东西,那么你可以使用这个:

 import re twitter_username_re = re.compile(r'@([A-Za-z0-9_]+)') 

为了让每个实例成为一个HTML链接,你可以这样做:

 my_html_str = twitter_username_re.sub(lambda m: '<a href="http://twitter.com/%s">%s</a>' % (m.group(1), m.group(0)), my_tweet) 

我使用的正则expression式,已经在多种情况下进行了testing:

 /(^|[^@\w])@(\w{1,15})\b/ 

这是我发现testing和replacestring中的Twitter用户名最干净的方式。

 #!/usr/bin/python import re text = "@RayFranco is answering to @jjconti, this is a real '@username83' but this is an@email.com, and this is a @probablyfaketwitterusername"; ftext = re.sub( r'(^|[^@\w])@(\w{1,15})\b', '\\1<a href="http://twitter.com/\\2">\\2</a>', text ) print ftext; 

这将如预期般回报我:

 <a href="http://twitter.com/RayFranco">RayFranco</a> is answering to <a href="http://twitter.com/jjconti">jjconti</a>, this is a real '<a href="http://twitter.com/username83">username83</a>' but this is an@email.com, and this is a @probablyfaketwitterusername 

基于Twitter的规格 :

您的用户名不能超过15个字符。 您的真实姓名可能会更长(20个字符),但为方便起见,用户名会缩短。 如上所述,用户名只能包含字母数字字符(字母AZ,数字0-9),但下划线除外。 检查以确保您所需的用户名不包含任何符号,破折号或空格。

Twitter 最近发布了开源的各种语言,包括Java,Ruby( gem )和Javascript实现的代码,用于查找用户名,哈希标记,列表和URL。

这是非常正规的expression导向。

表单中接受的唯一字符是AZ,0-9和下划线。 用户名不区分大小写 ,所以你可以使用r'@(?i)[a-z0-9_]+'正确匹配所有内容,并且在用户之间进行区分。

更短, /@([\w]+)/正常工作。

这是一个我在一个项目中使用的方法,该项目采用tweet对象的text属性,并在Twitter上将带有hashtags和user_mentions的文本链接到相应的页面,并遵循最新的twitter显示准则

 def link_tweet(tweet): """ This method takes the text attribute from a tweet object and returns it with user_mentions and hashtags linked """ tweet = re.sub(r'(\A|\s)@(\w+)', r'\1@<a href="http://www.twitter.com/\2">\2</a>', str(tweet)) return re.sub(r'(\A|\s)#(\w+)', r'\1#<a href="http://search.twitter.com/search?q=%23\2">\2</a>', str(tweet)) 

一旦你调用这个方法,你可以传入参数my_tweet [x] .text。 希望这是有帮助的。

这个正则expression式似乎解决了Twitter用户名:

 ^@[A-Za-z0-9_]{1,15}$ 

最多15个字符,允许直接在@之后加上下划线(这是Twitter的),并且允许所有的下划线(在快速search之后,我发现Twitter显然也是这样)。 不包括电子邮件地址。