2017-09-25 30 views
0

我有这样data = ['This is the sentence "Hello" by writer "MK"', '2 Worlds [Harry]']双引号内的匹配和提取子用正则表达式

字符串列表,我想只提取"Hello,这里就是我所做的:

import re 
s = re.match('This is the sentence (.*) by writer', data[0]) 
s 

但是,相反的"Hello ,我得到这个<_sre.SRE_Match object; span=(0, 38), match='This is the sentence "Hello" by writer'>

有人能告诉我如何将其正确写入?

+0

你想实现这样的事情? https://eval.in/867424 –

+2

当您打印's',它打印的正则表达式匹配对象 - 多以同样的方式,如果你编写一个函数,然后在不调用它打印函数的名字,你会得到该对象的字符串表示,*不*该函数将返回的内容。 (。*)如果你想访问你'标志着组',你必须访问显式:'打印(s.group(1))' – n1c9

+0

您标记的解决方案是次优的正则表达式的条款。如果你想改善你的正则表达式,请参阅:https://stackoverflow.com/a/46398384/4909087 –

回答

0

当您打印S,它打印的正则表达式匹配对象 - 多以同样的方式,如果你编写一个函数,然后在不调用它打印函数的名字,你会得到该函数的字符串表示的,而不是该函数将返回:

def hello(): 
    return 'hello!' 

print(hello) 
>>> <function hello at 0x7f570e3aa9b0> 

如果你想访问你所指的小组,你必须获得明确(。*):另外

s = re.match('This is the sentence (.*) by writer', data[0]) 
print(s.group(1)) 
>>>"Hello 

,您可以检查是否有一个匹配组按以下方式,避免了一个AttributeError,如果再是不匹配:

s = re.match('This is the sentence (.*) by writer', data[0]) 
if s: 
    print(s.group(1)) 
+0

随着每一次编辑,这个答案越来越接近我的...会欣赏一些归属或只是不加它,谢谢。 –

+0

你想要归因于什么?我的评论与本答案基本相同,在答案前2分钟发布。 – n1c9

+0

提到AttributeError的部分。一个简单的,“就像他们的答案中提到的冷饮,你可以检查...”就足够了。 –

0

假设你只是想无论是带引号的字符串中,使用re.search与捕获组,如果发现匹配提取的第一个组。

m = re.search('"(.*?)"', data[0]) 
if m: 
    print(m.group(1)) 
Hello

如果发现匹配,则返回match对象。您可以调用此对象的group(n)属性来提取您的字符串。如果没有匹配,则返回None。出于这个原因,有必要在打印之前查询返回值,否则您会收到一个AttributeError

详细

"  # double quote 
(  # open 1st capture group 
.*?  # non-greedy matcher 
)    
" 

注意,你不应该硬编码的模式。更重要的是,除非你知道你在做什么,否则不要使用贪婪捕获.*

0

“re.match”返回“MatchObject”,你需要做的使用.group(1)来从比赛的数据。

相关问题