python - 如何根据一组多对模式中两个模式的共现来修剪字符串?
问题描述
我有一个输入字符串列表和一个元组列表,每个元组包含一对字符串模式:
list_strings=["ABC","ABCDEF","CDEFGH","AB","CDEFGHIJK","DEFGHIJKLMNO"]
list_patterns=[("A","C"),("CDE","JK"),("EF","MNO")
我想要做的基本上是从list_strings
他们找到任何模式的位置切断字符串list_patterns
。因此,对于每个字符串,我想检索list_patterns
列表中任何元组的第一个和第二个成员之间的字符。
我使用哪些模式元组来剪切字符串并不重要,我只想保留每个元组的第一个和第二个成员之间的内容(修剪过的字符串)。
输出字符串将包含使用第一个匹配模式获得的修剪后的字符串;如果没有匹配的模式,原始字符串将被保留。此外,我还想创建一个包含已成功修剪的字符串的列表。
我的输出将是这样的:
list_containing_all_strings=["B","B","CDEFGH","AB","FGHI","GHIJKL"]
list_containing_successful_trims=["B","B","FGHI","GHIJKL"]
解决方案
我只会遍历列表元素。对于它们中的每一个,我都会尝试搜索修剪模式,直到找到其中一个:
input_list=["ABC","ABCDEF","CDEFGH","AB","CDEFGHIJK","DEFGHIJKLMNO"]
list_patterns=[("A","C"),("CDE","JK"),("EF","MNO")]
output_list = []
trimmed_list = []
for el in input_list:
for pat in list_patterns:
beg = el.find(pat[0])
end = el.rfind(pat[1])
if(beg != -1 and end != -1):
trimmed_list.append(el[beg+len(pat[0]):end])
output_list.append(el[beg+len(pat[0]):end])
break
else:
output_list.append(el)
print(output_list)
print(trimmed_list)
output_list
和最初都是trimmed_list
空的。- 对于每个元素模式,执行起始模式的直接搜索(
find()
onpat[0]
)和结束模式的反向搜索(rfind()
onpat[1]
) - 仅当它们都已找到时(检查 -1)将原始字符串的正确字符串切片
output_list
附加到andtrimmed_list
和break
- 对于每个元素,只要找不到模式 (
else
),就将原始字符串附加到output_list
输出:
['B', 'B', 'CDEFGH', 'AB', 'FGHI', 'GHIJKL']
['B', 'B', 'FGHI', 'GHIJKL']
推荐阅读
- botframework - MS Teams 的动态自适应卡
- r - R源代码中换页符的一些实际应用是什么?
- sql - '列是没有时区的时间戳类型,但表达式是间隔类型' Redshift
- docker - dynamodb -inMemory 模式在 Docker 容器中未按预期工作
- python-3.x - Tensorboard:“localhost 拒绝连接”,Tensorboard 页面完全空白
- java - 如何更改波纹效果的纯色
- javascript - WebdriverIO执行几行客户端JS失败
- spring-boot - Spring Security 认证成功后再次重定向到登录页面
- javascript - vuejs 上的模态窗口
- sql - MS SQL (2014) 慢查询与代码中的注释