Вытягивание списка строк из строки

Beginning

Line 2
Line 3
Line 4
Line 5
Line 6
End

Попытка вывести линию 2 через линию 6. Нельзя сделать это, чтобы спасти мою душу. a - сохраненная строка, которую я просматриваю.

b = re.findall(r'Beginning(.*?)End', a)

Не дает мне ничего, просто пусто. Я знаю, что это из-за новых строк, но как я могу найти и продвигаться вперед с новыми линиями. Я пробовал, не зная точно точно, как я могу использовать MULTILINE или DOTALL. Ничего не изменилось.

Как я могу заставить его поставить строки с 2 по 6 в b?

Чтобы добавить это, это произойдет несколько раз через тот же файл, который мне нужен, чтобы выполнить эту технику поиска и вытягивания. У меня нет другого легкого способа сделать это, так как информация в Линии 2-6 нуждается в дальнейшем просмотре, чтобы вытащить данные, которые будут помещены в файл csv. Поскольку некоторые данные содержат часы, а некоторые данные не содержат часов, ака недоступны, мне нужно уметь отделять и различать два события.

python-3.x,

0

Ответов: 2


0
string = """Beginning

Line 2
Line 3
Line 4
Line 5
Line 6
End
"""

lines = string.splitlines()
answer = []
flag = False
for line in lines:
    line = line.strip()
    if not line: continue
    if line == "Beginning":
        flag = True
        continue
    if line == "End": flag = False
    if not flag: continue
    answer.append(line)

Вывод:

In [209]: answer
Out[209]: ['Line 2', 'Line 3', 'Line 4', 'Line 5', 'Line 6']

0

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

def Function(string, starting_line, ending_line):
    if "
" in string: #Checks for whether or not string is mult-line
        pass
    else:
        return "The string given isn't a multiline string!" #If string isn't multiline, then Function returns a string explaining that string isn't a multi-line string
    if ending_line < starting_line: #Checks if ending_line < starting_line
        return "ending_line is greater than starting_line!" #If ending_line < starting_line, then Function returns a string explaining that ending_line > starting_line
    array = [] #Defines an array
    for i in range(len(string)): #Loops through len(string)
        if list(string)[i] = "
": #Checks whether list(string)[i] = a new line
            array.append(i) #Appends i to array
    return string[array[starting_line - 1]::array[ending_line - 1]]
print(Function(a, 3, 7))

Этот код должен возвращать:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
питон-3.x,
Похожие вопросы