Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将@user与regex匹配_Python_Regex_Twitter - Fatal编程技术网

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个字符(用户名最大长度)啊!现在我知道了,我把*放在捕获组之外。谢谢!啊!现在我知道了,我把*放在捕获组之外。谢谢!