Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.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
提取多个实例regex-python_Python - Fatal编程技术网

提取多个实例regex-python

提取多个实例regex-python,python,Python,我有一个字符串: This is @lame 在这里我要拔掉瘸子。但问题是,上面的字符串可以 This is lame 在这里,我没有提取任何东西。然后这个字符串可以是: This is @lame but that is @not 在这里我提取跛脚和不 因此,在每种情况下,我期望的输出是: [lame] [] [lame,not] 如何在python中以健壮的方式提取这些模式?用于查找多个模式;在本例中,对于前面有@的任何内容,包括单词字符: re.findall(r'(?<

我有一个字符串:

This is @lame
在这里我要拔掉瘸子。但问题是,上面的字符串可以

This is lame
在这里,我没有提取任何东西。然后这个字符串可以是:

This is @lame but that is @not
在这里我提取跛脚和不

因此,在每种情况下,我期望的输出是:

 [lame]
 []
 [lame,not]
如何在python中以健壮的方式提取这些模式?

用于查找多个模式;在本例中,对于前面有@的任何内容,包括单词字符:

re.findall(r'(?<=@)\w+', inputtext)
如果计划重用该模式,请先编译表达式,然后在已编译的正则表达式对象上使用:

at_words = re.compile(r'(?<=@)\w+')

at_words.findall(inputtext)
这将在每次调用.findall时为您节省缓存查找时间。

用于查找多个模式;在本例中,对于前面有@的任何内容,包括单词字符:

re.findall(r'(?<=@)\w+', inputtext)
如果计划重用该模式,请先编译表达式,然后在已编译的正则表达式对象上使用:

at_words = re.compile(r'(?<=@)\w+')

at_words.findall(inputtext)

这将在每次调用.findall时为您节省缓存查找。

这将提供您请求的输出:

import re
regex = re.compile(r'(?<=@)\w+')
print regex.findall('This is @lame')
print regex.findall('This is lame')
print regex.findall('This is @lame but that is @not')

这将提供您请求的输出:

import re
regex = re.compile(r'(?<=@)\w+')
print regex.findall('This is @lame')
print regex.findall('This is lame')
print regex.findall('This is @lame but that is @not')

您应该使用re lib,以下是一个示例:

import re
test case = "This is @lame but that is @not"
regular = re.compile("@[\w]*")
lst= regular.findall(test case)

您应该使用re lib,以下是一个示例:

import re
test case = "This is @lame but that is @not"
regular = re.compile("@[\w]*")
lst= regular.findall(test case)

这将在输出中包含@符号。当然,但OP为其输入案例提供了明确的预期输出示例。已更新以删除@符号。这将编译正则表达式,因此如果匹配多个字符串,性能会更高。可能是“@\w+”查找任意长的组,而“?@Enfenion啊,好的。我运行了一些测试,当我将运行次数增加到100k时,结果更接近。我使用的是python 2.6.5,得到了0.4秒和0.25秒。这将在输出中包含@符号。当然,但OP为其输入案例提供了明确的预期输出示例。已更新,以便删除@-符号。这将编译正则表达式,因此如果匹配多个字符串,性能会更高。可能是“@\w+”查找任意长的组,而“?@Enfenion啊,好的。我运行了一些测试,当我将运行次数增加到100k时,结果更接近。我使用的是python 2.6.5,我得到了0.4秒和0.25秒。这将在输出中包括@符号。[…]方括号是多余的,\w可以单独使用。这还将返回@字符的匹配,后面没有任何单词字符,因为您使用了*表示0或更多。这将在输出中包括@符号。[…]方括号是多余的,\w可以单独使用。这也将返回@字符的匹配,后面没有任何单词字符,因为您使用了*表示0或更多。只是好奇,@\w+有什么不同?它产生同样的结果。@Bibhas:这是.findall特殊套管捕获组的副作用。在一个有捕获组的模式中,只返回该组的内容,而不是返回整个匹配的模式。@Bibhas:在这种情况下,最终结果是一样的。我知道。所以我把它变成了一个团体。这就是这里需要的,对吗?乍一看,我发现两者都很简单;这只是认识语法的问题,不是吗?我必须对哪一个更快进行比较测量。只是好奇,@\w+有什么不同?它产生同样的结果。@Bibhas:这是.findall特殊套管捕获组的副作用。在一个有捕获组的模式中,只返回该组的内容,而不是返回整个匹配的模式。@Bibhas:在这种情况下,最终结果是一样的。我知道。所以我把它变成了一个团体。这就是这里需要的,对吗?乍一看,我发现两者都很简单;这只是认识语法的问题,不是吗?我得比较一下哪一个更快。