У меня был более длительный перерыв в Python, и теперь мне снова нужна ваша помощь :)
У меня множество выглядит так:
['>lcl|NC_003078.1_gene_1 [gene=lacE] [locus_tag=SM_b21652] [location=1..1275]\n','>lcl|NC_003078.1_gene_2 [gene=lacF] [locus_tag=SM_b21653] [location=complement(22345..23337)]\n']
Массив содержит намного больше записей, все они выглядят так, как в приведенных примерах. Я хочу извлечь по одной части каждого элемента с помощью Regex. часть, которую я хочу извлечь - это
[location.....]
Я использую Regexr для создания своих регулярных выражений и Я пытался:
locationArray=[]
for entry in storageArray:
location.Array.append((re.findall("(\[location=\d*|complement\(\d*\.\.\d*\)\]|\.\.\d*\]))",str(entry))))
print(locationArray)
Когда вы делаете это с помощью Regexr в браузере, похоже, что Regex работает.
Ожидаемый / желаемый результат:
['[location=...]','[location=...]' etc]
Фактический выход:
[['cE]', '_b21625]','[location=1','..1257]'],
По сравнению с вводом, части были взяты из гена и locus_tag. Я не понимаю, почему :( Я неправильно понял структуру массива? Это о моем регулярном выражении?
Помощь приветствуется!
Тем не менее, это не мой окончательный желаемый результат. После извлечения всех локаций я хочу обработать их и получить вот что:
Start: 1 End: 1275
Start: 22345 End: 23337
Так как у меня даже не получилось извлечь часть локации, я уже здесь спрашиваю.
Спасибо за помощь. Я также ценю разные подходы к решению проблемы. Наверное, мой способ не лучший для этого?






import re
a = ['>lcl|NC_003078.1_gene_1 [gene=lacE] [locus_tag=SM_b21652] [location=1..1275]\n','>lcl|NC_003078.1_gene_2 [gene=lacF] [locus_tag=SM_b21653] [location=complement(22345..23337)]\n']
for i in a:
val = re.findall("location\=.*?]", i)[0] #Find Location.
val = re.findall("\d+", val) #Find start and end.
print("Start: {0} End: {1}".format(val[0], val[1]))
выход:
Start: 1 End: 1275
Start: 22345 End: 23337
То, что вы пытаетесь сделать, это
\[location=[^\]]+\]