赞
踩
# 从字符串中截取两个关键字之间的字段且截取字段不包含第二个关键字,返回列表。 import re def cut_out_str_by_2kw(s:str,kw1:str,kw2:str) -> list: ''' 更新于2021.05.13 彡 s为不含换行符和制表符的字符串。 本函数用于从字符串中无重复地截取两个关键字之间的字段且截取字段不包含第二个关键字,返回列表, 若关键字中有一个为空而另一个在字符串中,则空的关键字以非空关键字及字符串的前后两端为界, 若关键字非空且不在字符串中则返回空列表。 若关键字非空虽然在字符串中,但有连体现象或单个组反序,亦返回空列表。 若两个关键字非空且相同,但是字符串中只出现一个关键字时,则会报错 ''' n2 = len(kw2) if kw1 + kw2 == '': return [s] elif kw1 == '': #if s[-n2:] == kw2: # pass #else: # s = s + kw2 li0 = [] for i in re.findall(kw1+'.*?'+kw2,s): li0.append(i[:-n2]) return li0 elif kw2 == '': if s[-n2:] == kw2: pass else: s = s + kw1 return cut_out_str_by_2kw(s,kw1,kw1) else: #if s[-n2:] == kw2: # pass #else: # s = s + kw2 try: s = re.search(kw1+'.*'+kw2,s).group(0)#用贪婪取法取出可能区域,减少后期计算 #s = re.findall(kw1+'.*'+kw2,s)[0] #在查询一个结果的条件下search与findall速度差不到 li1 = re.search(kw1+'.*?'+kw2,s).group(0)[:-n2]#用非贪婪取法取出第一个符合要求的截断 s = s[len(li1)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。