Twitter用户名的正则表达式

时间:2010-02-21 03:19:46

标签: python regex twitter

您能提供与Twitter用户名匹配的正则表达式吗?

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

11 个答案:

答案 0 :(得分:71)

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

我已经使用了它,因为它忽略了电子邮件。

以下是一条推文示例:

  

@Hello @you在做什么@my_friend,发送电子邮件@ 000 me @ whats.up@example.com @shahmirj

匹配

  • @Hello
  • @you
  • @my_friend
  • @shahmirj

它也适用于主题标签,我使用相同的表达式,@更改为#

答案 1 :(得分:18)

如果您在谈论他们在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)

答案 2 :(得分:18)

我使用的正则表达式,并且已经在多个上下文中进行了测试:

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

这是我发现在字符串中测试和替换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 specs

  

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

答案 3 :(得分:11)

Twitter recently releasedopen source,使用各种语言,包括Java,Ruby(gem)以及用于查找用户名,哈希标记,列表和网址的代码的Javascript实现。< / p>

这是非常规律的表达方式。

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

这是我在项目中使用的一种方法,它采用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))

调用此方法后,您可以传入param my_tweet [x] .text。希望这有用。

答案 7 :(得分:1)

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

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

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

答案 8 :(得分:0)

如果您需要匹配所有handle@handletwitter.com/handle格式,这是一个变体:

import re

match = re.search(r'^(?:.*twitter\.com/|@?)(\w{1,15})(?:$|/.*$)', text)
handle = match.group(1)

说明,示例和可使用的正则表达式: https://regex101.com/r/7KbhqA/3

匹配

myhandle
@myhandle
@my_handle_2
twitter.com/myhandle
https://twitter.com/myhandle
https://twitter.com/myhandle/randomstuff

不匹配

mysuperhandleistoolong
@mysuperhandleistoolong
https://twitter.com/mysuperhandleistoolong

答案 9 :(得分:0)

您可以使用以下正则表达式:^ @ [A-Za-z0-9 _] {1,15} $

在python中:

import re    
pattern = re.compile('^@[A-Za-z0-9_]{1,15}$')
pattern.match('@Your_handle')

这将检查字符串是否与正则表达式完全匹配。

在“实用”设置中,您可以按以下方式使用它:

pattern = re.compile('^@[A-Za-z0-9_]{1,15}$')
if pattern.match('@Your_handle'):
    print('Match')
else:
    print('No Match')

答案 10 :(得分:0)

我已经使用了现有答案,并针对我的用例对其进行了修改。 (用户名必须长于4个字符)

^[A-z0-9_]{5,15}$

规则:

  • 您的用户名必须超过4个字符。
  • 您的用户名必须少于15个字符。
  • 您的用户名只能包含字母,数字和'_'。

来源:https://help.twitter.com/en/managing-your-account/twitter-username-rules