Регулярное выражение Python для извлечения строки из кадра данных Python

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

Alamat :Menara Bank Mega, Lantai 24, Jl. Kapten P Tendean
Kav. 12-14A

Alamat :JL USMAN NO. 42, RT 8/4, KEL. KELAPA DUA WETAN,
KEC. PASAR REBO, JAKARTA TIMUR

Alamat :JL. HR. RASUNA SAID KAV 1-2, GRAHA IRAMA
LANTAI 6 KUNINGAN TIMUR- SETIABUDI JAKARTA
SELATAN

Alamat :GD. GRAHA PRATAMA LT.10, JL. MT. HARYONO
KAV.15, TEBET

AHUAlamat :GEDUNG BERITASATU PLAZA LT. 8, JL. JEND. GATOT
SUBROTO KAV. 35-36

Я ожидаю извлечь все после ":". Есть ли регулярное выражение, чтобы найти все вышеперечисленное?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Одним из возможных подходов является использование re.search():

(?:Alamat|AHUAlamat): группа без захвата, которая соответствует либо «Аламат», либо «АХУАламат».
\s*: соответствует любому количеству пробельных символов.
:: соответствует символу двоеточия.
(.*): это группа захвата, которая соответствует любой последовательности символов, кроме новой строки.

import re

data_str = """Alamat :Menara Bank Mega, Lantai 24, Jl. Kapten P Tendean Kav. 12-14A
Alamat :JL USMAN NO. 42, RT 8/4, KEL. KELAPA DUA WETAN, KEC. PASAR REBO, JAKARTA TIMUR
Alamat :JL. HR. RASUNA SAID KAV 1-2, GRAHA IRAMA LANTAI 6 KUNINGAN TIMUR- SETIABUDI Jakarta SELATAN
Alamat :GD. GRAHA PRATAMA LT.10, JL. MT. HARYONO KAV.15, TEBET
AHUAlamat :GEDUNG BERITASATU PLAZA LT. 8, JL. JEND. GATOT SUBROTO KAV. 35-36
"""

pattern = r'(?:Alamat|AHUAlamat)\s*:(.*)'
addresses = data_str.splitlines()

for address in addresses:
    match = re.search(pattern, address)
    if match:
        print(match.group(1).strip())

Примечание. Если каждая строка строки имеет одинаковую структуру с :, то только split() может выполнить эту работу:

lst_data = data_str.splitlines()
addresses = [address.split(':')[-1] for address in lst_data]
print(*addresses, sep='\n')

Menara Bank Mega, Lantai 24, Jl. Kapten P Tendean Kav. 12-14A
JL USMAN NO. 42, RT 8/4, KEL. KELAPA DUA WETAN, KEC. PASAR REBO, JAKARTA TIMUR
JL. HR. RASUNA SAID KAV 1-2, GRAHA IRAMA LANTAI 6 KUNINGAN TIMUR- SETIABUDI Jakarta SELATAN
GD. GRAHA PRATAMA LT.10, JL. MT. HARYONO KAV.15, TEBET
GEDUNG BERITASATU PLAZA LT. 8, JL. JEND. GATOT SUBROTO KAV. 35-36

Ваши данные afer: и заканчиваются пустой строкой, поэтому вы можете использовать это RegEx

/Alamat *:(((?!(\n\n|\r\n\r\n)).)*)/gms

Онлайн проверка

Другие вопросы по теме