2016-02-27 53 views

回答

0

看到,因爲沒有正則表達式的專家在這裏沒有,我會提出這個解決方案(順便說一句,我添加"BDFEFGEDS"到您的字符串的末尾,以便它會給一些成果):

import re 

s = "FDBFBDFLDJVHVBDVBDBDFEFGEDS" 

endings = ['EFG', 'EDS'] 
matches = [] 

for ending in endings: 
    match = re.findall(r'(?=(BDF.*{0}))'.format(ending), s) 
    matches.extend(match) 

print matches 

給出結果:

['BDFLDJVHVBDVBDBDFEFG', 'BDFEFG', 'BDFLDJVHVBDVBDBDFEFGEDS', 'BDFEFGEDS'] 
1

您可以使用re.finditer

>>> import re 
>>> s = "FDBFBDFLDJVHVBDVBDBDFEFGEDS" 
>>> print [s[a.start(): a.end()] for a in re.finditer('BDF', s)] 
['BDF', 'BDF'] 
1

發現每串子,與類似「BDF」開始,或者用「EFG」或「EDS」

這對正則表達式的工作結束。提取所有這樣子的一個列表:

import re 

substrings = re.findall(r'BDF.*?E(?:FG|DS)', text) 

如果一個子可能包含新行再通flags=re.DOTALL

實施例:

>>> re.findall(r'BDF.*?E(?:FG|DS)', "FDBFBDFLDJVHVBDVBDBDFEFGEDS") 
['BDFLDJVHVBDVBDBDFEFG'] 

.*?是不貪,因此最短的子串被選擇。刪除?,以獲得最長的匹配。

相關問題