如何在python中为列表的每个对象提取两个标记之间的字符串
我有一张字符串列表。这些字符串中有所有的两个标记。我想为列表中的每个字符串提取这两个标记之间的字符串 例如:如何在python中为列表的每个对象提取两个标记之间的字符串,python,string,list,extract,Python,String,List,Extract,我有一张字符串列表。这些字符串中有所有的两个标记。我想为列表中的每个字符串提取这两个标记之间的字符串 例如: markers 'XXX' and 'YYY' --> therefore i want to extract 78665786 and 6866 ['XXX78665786YYYjajk', 'XXX6866YYYz6767'....] 你只需在你的列表上循环一下就可以了。您可以执行以下操作: import re my_list = ['XXX78665786YYYjaj
markers 'XXX' and 'YYY' --> therefore i want to extract 78665786 and 6866
['XXX78665786YYYjajk', 'XXX6866YYYz6767'....]
你只需在你的列表上循环一下就可以了。您可以执行以下操作:
import re
my_list = ['XXX78665786YYYjajk', 'XXX6866YYYz6767']
output = []
for item in my_list:
output.append(re.search('XXX(.*)YYY', item).group(1))
print(output)
输出:
['78665786', '6866']
命令split()将字符串拆分为不同的部分
list1 = ['XXX78665786YYYjajk', 'XXX6866YYYz6767']
list2 = []
for i in list1:
d = i.split("XXX")
for g in d:
d = g.split("YYY")
list2.append(d)
print(list2)
它被保存到一个列表中
import re
l = ['XXX78665786YYYjajk', 'XXX6866YYYz6767'....]
l = [re.search(r'XXX(.*)YYY', i).group(1) for i in l]
这应该行得通另一个解决方案是:
import re
test_string=['XXX78665786YYYjajk','XXX78665783336YYYjajk']
int_val=[int(re.search(r'\d+', x).group()) for x in test_string]
您可以为lst中的s应用字符串切片:
[s[s.index('XXX')+3:s.index('YYY')]。或者使用:[re.search(“XXX(.*)YYY”,s).group(1)在lst中搜索s]
。感谢您的回答。+3:代表什么?3
是'XXX'
字符串的长度,因此我们需要将其添加到结果中不包含XXX
。确定。我们可以忽略YYY的长度?是的,str.index()
返回子字符串中第一个字符的索引。这绝对不是用于此的最佳正则表达式模式,有太多的情况可能会失败。我得到以下信息-->'NoneType'对象没有属性'group'@derpaminontas_1992,这意味着字符串中没有匹配的模式,所以它返回了None
@derpaminontas_1992你能评论一下你写的东西吗?只要表达式和字符串包含相同的模式,它就会找到子字符串。我发现了错误。下面代码后面的列表包含两个在fasta_文件中没有forw_primer和rev_primer的字符串:match=[p代表fasta_文件中的p,如果在p中有forw_primer和rev_primer]问题是,我不知道为什么还有另外两个没有标记的序列。请使用try和except。确保准确记录不符合预期的内容,并检查数据集以及从何处获取数据。我在这里的示例中得到了-->AttributeError:“NoneType”对象没有属性“group”,您可以将正在使用的列表粘贴到这里吗。此错误是缺少给定模式的结果,即“XXX{some string}YYY”。我发现了错误。下面代码后面的列表包含两个在fasta_文件中没有forw_primer和rev_primer的字符串:match=[p对于fasta_文件中的p,如果forw_primer和rev_primer在p中]问题是,我不知道为什么我得到了另外两个没有标记的序列