извлечение строки со строкой из файла с использованием Python - PullRequest
0 голосов
/ 28 ноября 2018

Team,

Я хочу извлечь некоторые строки, используя строку (начинается с tg_) из файла, и я получаю вывод в соответствии с регулярным выражением ниже. Вопрос в том,

  1. Я не уверен, как извлечь строку, если две строки заканчиваются на \, как показано ниже.

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

***** из файла *******

tg_cr_counters dghbvcvgfv

tg_kk_bb группа1 пока, пока, пока, привет, привет, привет 1 \ <<<< <br>патч mac hdfh f dgf asadasf \
dgfgmnhnjgfg

tg_cr_counters gthghtrhgh}}] <<<<< </p>

tg_cr_counters fkgnfkmngvd

import re

file = open("C:\\Users\\input.tcl", "r")
f1 = file.readlines()

output = open("extract.txt", "a+")

match_list = [ ]   

for item in f1:

    match_list = re.findall(r'[t][g][_]+\w+.*', item)
    if(len(match_list)>0):
        output.write(match_list[0]+"\r\n")
        print(match_list)

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете использовать регулярные выражения с флагами для re.MULTILINE и re.DOTALL .

Таким образом, . также будет соответствовать \n, и вы можете искать все, что начинается с tg_ (не нужно вводить каждое в []) и заканчивается двойным \n\n (или конец текста) \Z:

fn = "t.txt"
with open (fn,"w") as f: 
    f.write("""*****from a file*******

tg_cr_counters dghbvcvgfv

tg_kk_bb a group1 bye bye bye hi hi hi 1 \ <<<<
patch mac hdfh f dgf asadasf \
dgfgmnhnjgfg

tg_cr_counters gthghtrhgh }} ] <<<<<

tg_cr_counters fkgnfkmngvd
""")

import re

with open("extract.txt", "a+") as o, open(fn) as f:
    for m in re.findall(r'^tg_.*?(?:\n\n|\Z)', f.read(), flags=re.M|re.S):
        o.write("-"*40+"\r\n")
        o.write(m)
        o.write("-"*40+"\r\n")

with open("extract.txt")as f:
    print(f.read())

Вывод (каждое совпадение находится между строкой ----------------------------------------):

----------------------------------------
tg_cr_counters dghbvcvgfv

----------------------------------------
----------------------------------------
tg_kk_bb a group1 bye bye bye hi hi hi 1 \ <<<<
patch mac hdfh f dgf asadasf dgfgmnhnjgfg

----------------------------------------
----------------------------------------
tg_cr_counters gthghtrhgh }} ] <<<<<

----------------------------------------
----------------------------------------
tg_cr_counters fkgnfkmngvd
----------------------------------------

re.findall() результат выглядит следующим образом:

['tg_cr_counters dghbvcvgfv\n\n', 
 'tg_kk_bb a group1 bye bye bye hi hi hi 1 \\ <<<<\npatch mac hdfh f dgf asadasf dgfgmnhnjgfg\n\n', 
 'tg_cr_counters gthghtrhgh }} ] <<<<<\n\n', 
 'tg_cr_counters fkgnfkmngvd\n']

Чтобы включить многострочный поиск, вам нужно читать более одной строки за раз - если ваш файл хумный , это приведет к проблемам с памятью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...