我知道这是开放式的,但我不知道该怎么做。
假设我有字符串"FDBFBDFLDJVHVBDVBD"
,并希望找到以"BDF"
开头并以"EFG"
或"EDS"
结尾的每个子字符串,是否有简单的方法吗?
答案 0 :(得分:1)
您可以使用re.finditer
>>> import re
>>> s = "FDBFBDFLDJVHVBDVBDBDFEFGEDS"
>>> print [s[a.start(): a.end()] for a in re.finditer('BDF', s)]
['BDF', 'BDF']
答案 1 :(得分: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']
.*?
并不贪心,因此选择了最短的子串。移除?
,以获得最长的匹配。
答案 2 :(得分: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']