您能提供与Twitter用户名匹配的正则表达式吗?
如果提供了Python示例,则额外奖励。
答案 0 :(得分:71)
(?<=^|(?<=[^a-zA-Z0-9-_\.]))@([A-Za-z]+[A-Za-z0-9-_]+)
我已经使用了它,因为它忽略了电子邮件。
以下是一条推文示例:
@Hello @you在做什么@my_friend,发送电子邮件@ 000 me @ whats.up@example.com @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
您的用户名不能超过15个字符。您的真实姓名可以更长(20个字符),但为了方便起见,用户名会更短。 如上所述,用户名只能包含字母数字字符(字母A-Z,数字0-9),但下划线除外。检查以确保所需的用户名不包含任何符号,短划线或空格。
答案 3 :(得分:11)
Twitter recently released到open 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
,@handle
和twitter.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}$
规则:
来源:https://help.twitter.com/en/managing-your-account/twitter-username-rules