我有字符串: -如何找到一個字母的雙重發生在一個字
s = 'bubble'
如何使用正則表達式來得到這樣的列表:
['b', 'u', 'bb', 'l', 'e']
我想過濾單一的以及信件的雙重出現。
我有字符串: -如何找到一個字母的雙重發生在一個字
s = 'bubble'
如何使用正則表達式來得到這樣的列表:
['b', 'u', 'bb', 'l', 'e']
我想過濾單一的以及信件的雙重出現。
你真的有兩個問題。第一個問題是如何分割列表,其次是如何過濾。
分割利用模式中的反向引用。在這種情況下,我們將構造一個模式,將會發現一個或兩個字母出現,然後從搜索結果中構建一個列表。代碼塊中的\ 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']
這應做到:
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']
如果你只想找到雙重事件,你可以使用?而不是正則表達式中的*。您也可以使用原始字符串,而不必轉義反斜槓。 – Thayne
參見下面的SO柱; http://stackoverflow.com/questions/6306098/regexp-match-repeated-characters – user1749431