Все убрано:
import re
b_list = []
match_string = re.compile(r'^(?=.*/F)(?:[^/\n]*/){1,}[^/\n]*$|^(?=.*A/RB2$)(?:[^/\n]*/){3,}[^/\n]*$')
with open('textfile.txt') as f:
for i in f:
match = match_string.match(i)
if match:
print(match.group(0))
b_list.append(match.group(0)) # Unsure what you need in b_list, this will only add the found string
Оригинальный ответ:
Попробуйте поместить цикл for в оператор with и убрать необходимость в readlines
import re
with open('textfile.txt','r') as f:
b_list = []
for i in f:
s = re.match(r'^(?=.*/F)(?:[^/\n]*/){1,}[^/\n]*$|^(?=.*A/RB2$)(?:[^/\n]*/){3,}[^/\n]*$',i)
if s:
print(s.group(0))
b_list.append(s)
Можно также по-прежнему использовать findall
, просто хотел, чтобы было ясно, что он соответствует только одному элементу в строке. Используя ваш оригинальный код:
s = re.findall(r'^(?=.*/F)(?:[^/\n]*/){1,}[^/\n]*$|^(?=.*A/RB2$)(?:[^/\n]*/){3,}[^/\n]*$',i)
if len(s) > 0:
print(s[0])
b_list.append(s)