2014-02-23 49 views
0

我有字符串: -如何找到一個字母的雙重發生在一個字

s = 'bubble' 

如何使用正則表達式來得到這樣的列表:

['b', 'u', 'bb', 'l', 'e'] 

我想過濾單一的以及信件的雙重出現。

+0

參見下面的SO柱; http://stackoverflow.com/questions/6306098/regexp-match-repeated-characters – user1749431

回答

0

你真的有兩個問題。第一個問題是如何分割列表,其次是如何過濾。

分割利用模式中的反向引用。在這種情況下,我們將構造一個模式,將會發現一個或兩個字母出現,然後從搜索結果中構建一個列表。代碼塊中的\ 1是指第一個加括號的表達式。

import re 
pattern = re.compile(r'(.)\1?') 
s = "bubble" 
result = [x.group() for x in pattern.finditer(s)] 
print(result) 

要過濾存儲在result你可以使用一個列表理解上長度過濾器列表。

filtered_result = [x for x in result if len(x) == 2] 
print(filtered_result) 

您可以直接通過調整正則表達式來獲得重複集。

pattern2 = re.compile(r'(.)\1') 
result2 = [x.group() for x in pattern2.finditer(s)] 
print(result2) 

從上述運行的輸出是:

['b', 'u', 'bb', 'l', 'e'] 
['bb'] 
['bb'] 
3

這應做到:

import re 

[m.group(0) for m in re.finditer('(.)\\1*',s)] 

對於 '泡沫' 這個返回:

['b', 'u', 'bb', 'l', 'e', 's'] 

對於 'bubblesssss' 這將返回:

['b', 'u', 'bb', 'l', 'e', 'sssss'] 
+0

如果你只想找到雙重事件,你可以使用?而不是正則表達式中的*。您也可以使用原始字符串,而不必轉義反斜槓。 – Thayne

相關問題