Python 3.6 - Использование re.findall для извлечения подстроки из Array-Element

У меня был более длительный перерыв в 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

Так как у меня даже не получилось извлечь часть локации, я уже здесь спрашиваю.

Спасибо за помощь. Я также ценю разные подходы к решению проблемы. Наверное, мой способ не лучший для этого?

То, что вы пытаетесь сделать, это \[location=[^\]]+\]

revo 17.05.2018 12:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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

Другие вопросы по теме