Как разделить строку на основе регулярного выражения, используя Python - PullRequest
0 голосов
/ 13 марта 2020

У меня есть Python строка с данными ниже.

--- Data-['tag']-['cli'] command ---> show date:

Current time: 2020-03-12 11:36:37 PDT

--- Data-['tag']-['shell'] command ---> show version:

OS Kernel 64-bit  
[builder_stable]

--- Data-['tag']-['cli'] command ---> show host:

Model: New

Я хочу разделить вышеуказанную строку на основе любой строки, которая начинается с «--- Data» и заканчивается «:», независимо от содержимого, которое находится между «--- Data» и « :" персонаж.

Мой код python показан ниже.

array = data.split("--- Data")

for word in array:
    print(word)

Я хочу, чтобы данные с разделителями возвращались по порядку, а также с разделителем.

Например, первый результат разделения должен быть таким:

--- Data-['tag']-['cli'] command ---> show date:

Current time: 2020-03-12 11:36:37 PDT

Второй результат разделения должен быть таким:

--- Data-['tag']-['shell'] command ---> show version:

OS Kernel 64-bit  
[builder_stable]

И так далее. Любая помощь?

Ответы [ 2 ]

2 голосов
/ 13 марта 2020

Вы можете использовать re.findall с шаблоном, который ищет шаблон разделителя, а затем лениво сопоставляет любые символы до следующего шаблона разделителя или конца строки:

import re

s = '''--- Data-['tag']-['cli'] command ---> show date:

Current time: 2020-03-12 11:36:37 PDT

--- Data-['tag']-['shell'] command ---> show version:

OS Kernel 64-bit  
[builder_stable]

--- Data-['tag']-['cli'] command ---> show host:

Model: New'''

delimiter = r'--- Data[^\n]*?:'
print(re.findall(r'{0}.*?(?={0}|$)'.format(delimiter), s, re.S))
1 голос
/ 18 марта 2020

Другое решение:

import re

s = '''--- Data-['tag']-['cli'] command ---> show date:

Current time: 2020-03-12 11:36:37 PDT

--- Data-['tag']-['shell'] command ---> show version:

OS Kernel 64-bit  
[builder_stable]

--- Data-['tag']-['cli'] command ---> show host:

Model: New'''

split_start = "--- Data"
l = re.split(split_start, s)
curr_split = [split_start+cs for cs in l if cs != ""]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...