Python 将@user与regex匹配
如何匹配以Python 将@user与regex匹配,python,regex,twitter,Python,Regex,Twitter,如何匹配以@开头并以结尾的单词,,:或 单词可以有任何字母数字字符,也可以由下划线组成 我已经想出了一个^@([a-zA-Z0-9)*)*[:;,]$,它似乎只适用于单字句子。只要去掉锚^和$,你就可以走了 如果您不想匹配“Example@nothing”中的空字符串,您可能需要指定“1个或多个限定符”+,而不是*。i、 e.@([a-zA-Z0-9!]+)[:;,] 将{1,15}替换为{1,15},即@([a-zA-Z0-9\]{1,15})[:;,],可以将用户名限制为1-15个字符 如果
@
开头并以结尾的单词代码>,
,:
或
单词可以有任何字母数字字符,也可以由下划线组成
我已经想出了一个^@([a-zA-Z0-9)*)*[:;,]$
,它似乎只适用于单字句子。只要去掉锚^
和$
,你就可以走了
如果您不想匹配“Example@nothing”
中的空字符串,您可能需要指定“1个或多个限定符”+
,而不是*
。i、 e.@([a-zA-Z0-9!]+)[:;,]
将{1,15}
替换为{1,15}
,即@([a-zA-Z0-9\]{1,15})[:;,]
,可以将用户名限制为1-15个字符
如果您希望得到@符号加上结尾字符作为结果,@[a-zA-Z0-9!]{1,15}[:;,]
就足够了
如果只想捕获名称,可以使用此@([a-zA-Z0-9!]{1,15})[:;,]
如果令牌正好位于字符串的末尾,并且没有特殊字符,并且您想要捕获它,那么您可能需要将[:;,]
修改为(?:[:;,]|$)
只需移除锚点^
和$
,您就可以开始了
如果您不想匹配“Example@nothing”
中的空字符串,您可能需要指定“1个或多个限定符”+
,而不是*
。i、 e.@([a-zA-Z0-9!]+)[:;,]
将{1,15}
替换为{1,15}
,即@([a-zA-Z0-9\]{1,15})[:;,]
,可以将用户名限制为1-15个字符
如果您希望得到@符号加上结尾字符作为结果,@[a-zA-Z0-9!]{1,15}[:;,]
就足够了
如果只想捕获名称,可以使用此@([a-zA-Z0-9!]{1,15})[:;,]
如果令牌正好位于字符串的末尾,并且没有特殊字符,并且您想要捕获它,您可能需要将[:;,]
修改为(?:[:;,]|$)
^
匹配字符串的开头(或行,在多行模式下),而$
匹配结尾,因此您需要删除它们:
>>> import re
>>> sentence = "foo bar @match don't match @success;"
>>> re.findall('@([a-zA-Z0-9_])*[:;, ]', sentence)
['h', 's']
它只捕获最后一个字母,因为限定符(*
)位于与捕获匹配的括号之外。把它移到里面,你会得到:
>>> re.findall('@([a-zA-Z0-9_]*)[:;, ]', sentence)
['match', 'success']
如果还想捕获@和尾随字符,只需将它们移到括号内即可:
>>> re.findall('(@[a-zA-Z0-9_]*[:;, ])', sentence)
['@match ', '@success;']
正如在对问题的评论中提到的,您可能希望也可能不希望将其限制在一定数量的字符内:
>>> sentence = "foo bar @match don't match @somereallylongnamehere @success;"
>>> re.findall('(@[a-zA-Z0-9_]{1,15}[:;, ])', sentence)
['@match ', '@success;']
(当然,长度限制可以添加到前面的任何表达式中,而不仅仅是最后一个表达式)。^
匹配字符串的开头(或多行模式下的行),而$
匹配结尾,因此您需要去掉它们:
>>> import re
>>> sentence = "foo bar @match don't match @success;"
>>> re.findall('@([a-zA-Z0-9_])*[:;, ]', sentence)
['h', 's']
它只捕获最后一个字母,因为限定符(*
)位于与捕获匹配的括号之外。把它移到里面,你会得到:
>>> re.findall('@([a-zA-Z0-9_]*)[:;, ]', sentence)
['match', 'success']
如果还想捕获@和尾随字符,只需将它们移到括号内即可:
>>> re.findall('(@[a-zA-Z0-9_]*[:;, ])', sentence)
['@match ', '@success;']
正如在对问题的评论中提到的,您可能希望也可能不希望将其限制在一定数量的字符内:
>>> sentence = "foo bar @match don't match @somereallylongnamehere @success;"
>>> re.findall('(@[a-zA-Z0-9_]{1,15}[:;, ])', sentence)
['@match ', '@success;']
(当然,长度限制可以添加到前面的任何表达式中,而不仅仅是最后一个表达式)。因为这是我们谈论的Twitter,您可能需要将其限制为15个字符(用户名最大长度)。因为这是我们谈论的Twitter,您可能需要将其限制为15个字符(用户名最大长度)啊!现在我知道了,我把*放在捕获组之外。谢谢!啊!现在我知道了,我把*放在捕获组之外。谢谢!