如何解决如何切片一个字符串,其中开始和结束由两个不同的子字符串定义?
所以我有一个这样的字符串列表:
list_strings=["YYYYATGMBMSSBAHHH","CCCCUINDAKSLLL","HHHHKJSHAKJJKKKK","ERRREEJK","XZXZOOOOYYYFFFFAKSXXX","RRRRRKJUUUUNNNNNGYRRRRRR","HHHHSDAFF"]
而且我有两个模式列表要在每个字符串中搜索:
forward_patterns=['ATG','KJ','OOOO','UI']
reverse_patterns=['GY','AKS','BA','JK']
我希望,对于 list_strings
中的每个字符串,从一个 forward_patterns
模式的位置到一个 reverse_patterns
模式的位置进行切片(开始和结束模式都应该是也删除)。对于每个模式列表,字符串应该只被切片一次,只考虑找到的第一次出现。找到并用于切片中的任何一个模式列表中的哪个模式都无关紧要
在这种情况下我的输出是这样的:
list_strings=["MBMSS","ND","SHATGKJ","untrimmed","YYYFFFF","UUUUNNNNN","untrimmed"]
我已经尝试过这些 for 循环,但不幸的是它没有修剪任何一个:
for i in range(len(list_strings)):
for pf in forward_patterns:
beg=list_strings[i].find(pf)
for pr in reverse_patterns:
end=list_strings[i].rfind(pr)
if(beg !=-1 and end !=-1):
list_strings[i]=list_strings[i][beg+len(pf):end]
else:
list_strings[i]="untrimmed"
基本上我得到了所有“未修剪”的列表,但我不知道为什么:
list_strings=["untrimmed","untrimmed"]
我的代码可能有什么问题? 提前感谢您的回答!
解决方法
基于上次更新:
res_list = []
for s in list_strings:
upatedString = s
for f in forward_patterns:
if f in upatedString:
upatedString = upatedString[upatedString.index(f)+len(f):]
break
for r in reverse_patterns:
if r in upatedString:
upatedString = upatedString[:upatedString.index(r)]
break
if len(upatedString) == len(s):
res_list.append("Untrimmed")
else:
res_list.append(upatedString)
res_list
,
你的例子有点混乱。我不明白为什么 'ERRREEJK' 是未修剪的,即使 'JK' 处于反向模式 oO。 也许这就是您要找的?
list_strings=["YYYYATGMBMSSBAHHH","CCCCUINDAKSLLL","HHHHKJSHAKJJKKKK","ERRREEJK","XZXZOOOOYYYFFFFAKSXXX","RRRRRKJUUUUNNNNNGYRRRRRR","HHHHSDAFF"]
forward_patterns=['ATG','KJ','OOOO','UI']
reverse_patterns=['GY','AKS','BA','JK']
new_strings = []
for string in list_strings:
for pattern in forward_patterns:
_temp = string.split(pattern,1)
if len(_temp) == 2:
_temp = _temp[1]
break
else:
_temp = _temp[0]
for pattern in reverse_patterns:
_temp = _temp.rsplit(pattern,1)[0]
if len(_temp) == 2:
break
if string == _temp:
new_strings.append('untrimmed')
else:
new_strings.append(_temp)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。