2015-11-06 49 views
2

我有一个字符串,如下所示。正则表达式在引号之间捕获字符串,特别是当字符串以引号开头时

string= 'Sam007's Helsen007' is a 'good' boy's in 'demand6's6'. 

我想提取引号内的字符串。

输出应该看起来像,

['Sam007's Helsen007', 'good', 'demand6's6'] 

我已经写在正则表达式:

re.findall("(?:[^a-zA-Z0-9]*')(.*?)(?:'[^a-zA-Z0-9*])", text) 

但是这给输出

["Sam007's Helsen007", 'good', "s in 'demand6's6"] 

当我使用修改的正则表达式来

re.findall("(?:[^a-zA-Z0-9]')(.*?)(?:'[^a-zA-Z0-9*])", text) 

它给我的输出:

['good', "demand6's6"] 

第二种情况似乎更合适,但如果一个字符串开始报价它不能处理的情况。

我该如何处理案件。

回答

6
st= "'Sam007's Helsen007' is a 'good' boy's in 'demand6's6'" 


print re.findall(r"\B'.*?'\B",st) 

使用\Bnon word boundary

输出:["'Sam007's Helsen007'", "'good'", "'demand6's6'"]

如果您通过串仔细看你想要一个字符串'其中有之前的一个非字字符和'具有非字字符后。

+2

好一个+1 .... –

+0

@Uchiha thanx :) – vks

+0

但我认为你还应该添加一些解释,这样即使非正则表达式的用户也许会明白你在做什么 –

相关问题