2015-11-06 70 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

但我認爲你還應該添加一些解釋,這樣即使非正則表達式的用戶也許會明白你在做什麼 –

相關問題