python上引号后的正则表达式
我正在尝试开发一个Python程序,可以从潘多拉的一个twit中获得艺术家的名字。例如,如果我有这个twitter: 我在听路德·范德罗斯在潘多拉星球上的“我能让它变得更好” 我只想把路德·范德罗斯的名字找回来。我对regex了解不多,因此我尝试执行以下代码:python上引号后的正则表达式,python,regex,Python,Regex,我正在尝试开发一个Python程序,可以从潘多拉的一个twit中获得艺术家的名字。例如,如果我有这个twitter: 我在听路德·范德罗斯在潘多拉星球上的“我能让它变得更好” 我只想把路德·范德罗斯的名字找回来。我对regex了解不多,因此我尝试执行以下代码: print re.findall('".+?" by [\w+]+', text) 但结果是路德的“我可以让它变得更好” 你知道如何在python上开发正则表达式吗?你需要使用捕获组 >>> s = '''
print re.findall('".+?" by [\w+]+', text)
但结果是路德的“我可以让它变得更好”
你知道如何在python上开发正则表达式吗?你需要使用捕获组
>>> s = '''I'm listening to "I Can Make It Better" by Luther Vandross on Pandora #pandora http://t.co/ieDbLC393F.'''
>>> import re
>>> m = re.search('to "?(.*?)"? by (.*?) on #?Pandora', s)
>>> m
<_sre.SRE_Match object; span=(14, 69), match='to "I Can Make It Better" by Luther Vandross on P>
>>> m.groups()
('I Can Make It Better', 'Luther Vandross')
print re.findall(r'"[^"]*" by ([A-Z][a-z]+(?: [A-Z][a-z]+){0,2})', text)
我使用了重复量词,因为名称可能只包含名字或first、lastname或first、middle、lastname
print re.findall('".+?" by ((?:[A-Z][a-z]+ )+)', text)
你可以试试这个。看演示
您可以使用此基于查找的正则表达式:
str = 'I\'m listening to "I Can Make It Better" by Luther Vandross on Pandora #pandora http://t.co/ieDbLC393F.';
print re.search(r'(?<=by ).+?(?= on)', str).group()
Luther Vandross
str='我在听《潘多拉》中路德·范德罗斯的《我能让它变得更好》http://t.co/ieDbLC393F.';
打印搜索(r’(?您的正则表达式很接近,但是您可以通过
和上的将分隔符更改为使用。但是,您需要使用括号来使用捕获组
您可以使用这样的正则表达式:
" by (.+?) on
这个正则表达式背后的思想是使用一个简单的非reedy正则表达式捕获“by
和on
之间的内容
匹配信息
MATCH 1
1. [43-58] `Luther Vandross`
代码
非常感谢您的帮助=)谢谢您的帮助=),我在理解regex的工作原理时遇到了一些困难,但这个答案让我更清楚了。@Filipe很乐意帮忙。我扫描了Twitter上的#Pandora标签,找到了更多的示例,并调整了表达式,使其能够与所有这些模式一起工作。
MATCH 1
1. [43-58] `Luther Vandross`
import re
p = re.compile(ur'" by (.+?) on')
test_str = u"I'm listening to \"I Can Make It Better\" by Luther Vandross on Pandora #pandora http://t.co/ieDbLC393F.\n"
re.search(p, test_str)