Как извлечь строку типа (010000 AAAAAAAA) из текста - PullRequest
0 голосов
/ 19 июня 2019

У меня есть входной файл, подобный этому:

JTS
FF
010000 AAAAAAAA
text-text1.1
-text1.2-)

JTS
FF
020000 AAAAAAAA
text-text text
text-text2
-text2)

и использующий этот код:

import re
input = open("input.txt", "r")

for line in input.read().split(")"):

 mySubString=line[line.find("JTS"):line.find("JTS")+3]
 mySubString2=line[line.find("FF"):line.find("FF")+2]

 print(mySubString,end=",")
 print(mySubString2,end=",")

result = re.findall(r'-\s*(.*?)(?=\s*-)', line)
 print(",".join(result)+"\n")

Я получаю этот вывод:

JTS,FF,,text1.1,text1.2

JTS,FF,,text2

Поэтому моя цель состоит в том, чтобы найти способ извлечь строку в третьей строке из каждого абзаца, чтобы напечатать вывод, подобный этому:

JTS,FF,010000 AAAAAAAA,text1.1,text1.2

JTS,FF,020000 AAAAAAAA,text2

Обратите внимание, что эта строка всегда идет в 3-й строке каждого абзацаи он всегда состоит из 15 символов и всегда начинается с цифры и заканчивается буквой.

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Причина, по которой абзац представлен в виде одной строки, если из-за разделения.

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

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

file = open("input.txt", "r")

third_lines = []
index = 0

for line in file:
    if index == 2:
        # rstrip() is to get rid of the linebreak
        third_lines.append(line.rstrip())
    index += 1
    if line == "\n":
        index = 0

print(third_lines)

# Output
# ['010000 AAAAAAAA', '020000 AAAAAAAA']
0 голосов
/ 20 июня 2019

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

with open("input.txt", "r") as input:
    result = ''
    for line in input.readlines():
        line = line.strip()
        if len(line) > 0:
            if not line.endswith(')'):
                result += '{}{}'.format(line, ',')
            else:
                result += line.rstrip(')')
                print(result)
        else:
            result = ''

# Output:
# JTS,FF,010000 AAAAAAAA,text-text1.1,-text1.2-
# JTS,FF,020000 AAAAAAAA,text-text text,text-text2,-text2

Если вы действительно хотите использовать регулярное выражение для извлечения текста из третьей строки, тогда следует выполнить следующий шаблон: r'^\d{6}\s\w{8}(?=\n)$'. Например:

import re

third_lines = []
with open("input.txt", "r") as input:
    for line in input.readlines():
        match = re.match(r'^\d{6}\s\w{8}(?=\n)$', line)
        if match:
            third_lines.append(match.group())

print(third_lines)

# Output:
# ['010000 AAAAAAAA', '020000 AAAAAAAA']

Также обратите внимание, что открытие файла как input = open("input.txt", "r") - не очень хорошая практика . Открытие файла с помощью оператора with (например, with open("input.txt", "r") as input) гарантирует, что файл будет правильно закрыт после завершения его обработки.

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