Python 查找并返回具有指定前缀的字符串

Python 查找并返回具有指定前缀的字符串,python,regex,string,Python,Regex,String,我很接近,但我不确定如何处理重新调整匹配对象。如果我这样做 p = re.search('[/@.* /]', str) 我将得到任何以@开头并以空格结尾的单词。这就是我想要的。但是,这会返回一个匹配对象,我不知道如何处理它。查找并返回前缀为@的字符串的计算效率最高的方法是什么 比如说, "Hi there @guy" 在做了正确的计算之后,我会被返回 guy p、 group0应该返回guy。如果你想知道一个对象有什么函数,你可以使用dirp方法来找出。这将返回可用于该对象实例的属性和方

我很接近,但我不确定如何处理重新调整匹配对象。如果我这样做

p = re.search('[/@.* /]', str)
我将得到任何以@开头并以空格结尾的单词。这就是我想要的。但是,这会返回一个匹配对象,我不知道如何处理它。查找并返回前缀为@的字符串的计算效率最高的方法是什么

比如说,

"Hi there @guy"
在做了正确的计算之后,我会被返回

guy

p、 group0应该返回guy。如果你想知道一个对象有什么函数,你可以使用dirp方法来找出。这将返回可用于该对象实例的属性和方法的列表。

p.group0应返回guy。如果你想知道一个对象有什么函数,你可以使用dirp方法来找出。这将返回可用于该对象实例的属性和方法的列表。

表明正则表达式并不像您认为的那样

s = "Hi there @guy"
p = re.search(r'@([^ ]+)', s) # this is the regex you described
print p.group(1) # first thing matched inside of ( .. )
但和通常的正则表达式一样,有大量的例子打破了这一点,例如,如果文本是s=Hi there@guy,逗号是什么?结果就是盖伊


所以你真的需要考虑每一件你想要和不想要匹配的事情。r'@[a-zA-Z]+'可能是一个很好的起点,它实际上只匹配字母a。。z、 没有unicode等。

正则表达式并没有做您认为它做的事情

s = "Hi there @guy"
p = re.search(r'@([^ ]+)', s) # this is the regex you described
print p.group(1) # first thing matched inside of ( .. )
但和通常的正则表达式一样,有大量的例子打破了这一点,例如,如果文本是s=Hi there@guy,逗号是什么?结果就是盖伊


所以你真的需要考虑每一件你想要和不想要匹配的事情。r'@[a-zA-Z]+'可能是一个很好的起点,它实际上只匹配字母a。。z、 无unicode等。

以下正则表达式可满足您的需要:

import re
s = "Hi there @guy"
p = re.search(r'@(\w+)', s)
print p.group(1)
它还适用于以下字符串格式:

s=你好@guy注意后面的空格 s=Hi here@guy,注意后面的逗号 s=你好@guy,注意下一个单词 s=你好@guy22注意后面的数字 s=Hi here@22guy注意前面的数字
以下正则表达式满足您的需要:

import re
s = "Hi there @guy"
p = re.search(r'@(\w+)', s)
print p.group(1)
它还适用于以下字符串格式:

s=你好@guy注意后面的空格 s=Hi here@guy,注意后面的逗号 s=你好@guy,注意下一个单词 s=你好@guy22注意后面的数字 s=Hi here@22guy注意前面的数字
从到目前为止的答案可以明显看出,正则表达式是解决问题的最有效的方法。关于您允许后面跟着@的内容,答案略有不同:

如果您更好地了解用户名中可能包含哪些字符,您可以调整正则表达式以反映这一点,例如,只有小写ascii字母:

[a-z]

注意:为了简单起见,我跳过了量词。

从到目前为止的答案可以明显看出,正则表达式是解决问题的最有效的方法。关于您允许后面跟着@的内容,答案略有不同:

如果您更好地了解用户名中可能包含哪些字符,您可以调整正则表达式以反映这一点,例如,只有小写ascii字母:

[a-z]
注意:为了简单起见,我跳过了量词。

你说:如果我做p=re.search'[/@.*/],str我会得到任何以@开头并以空格结尾的单词。但这是不正确的-该模式是一个字符类,它将匹配集合@/*和空格中的一个字符。注意:模式中有一个多余的秒/秒。 例如:

>>> re.findall('[/@.* /]', 'xxx@foo x/x.x*x xxxx')
['@', ' ', '/', '.', '*', ' ']
>>>
你说你想让guy从Hi there@guy那里回来,但这与一个空格冲突,并以一个空格结束

请编辑您的问题,以包含您真正想要/需要匹配的内容。

您说:如果我执行p=re.搜索“[/@.*/]”,str我将得到任何以@开头并以空格结尾的单词。但这是不正确的-该模式是一个字符类,它将匹配集合@/*和空格中的一个字符。注意:模式中有一个多余的秒/秒。 例如:

>>> re.findall('[/@.* /]', 'xxx@foo x/x.x*x xxxx')
['@', ' ', '/', '.', '*', ' ']
>>>
你说你想让guy从Hi there@guy那里回来,但这与一个空格冲突,并以一个空格结束


请编辑您的问题,以包括您真正想要/需要匹配的内容。

似乎不匹配,>>>>str=Jo那里@guy>>>p=re.search'[/@.*/],str>>p.group0''输出为'',我将添加一点,您可以在那里找到匹配对象的文档,>>>>str=Jo那里@guy>>>p=re.search'[/.*/],str>>>p.group0''输出为'',我要补充一点,您可以在中找到匹配对象的文档,这取决于'let's meet@11pm'是否应获得匹配。如果数字有效以及如何修改该正则表达式?实际上\w模式匹配任何字母数字字符和下划线,这相当于集合[a-zA-Z0-9_uu2;],因此,例如在11点时,将正确匹配。这取决于“让我们在11点时见面”是否应匹配如果数字为
重要的以及单词如何修改该正则表达式?实际上\w模式匹配任何字母数字字符和下划线,这相当于集合[a-zA-Z0-9],因此,例如@11pm将正确匹配。