Как извлечь текст из новой строки, за которой следуют некоторые конкретные ключевые слова в Python? - PullRequest
1 голос
/ 03 июня 2019

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

Пример ниже:

Hello,

please provide an update on the following invoice

Invoice#        Status    Invoice_Amount        Account#
646464646       Open      7446.00               53334444
645543333       Open      6443.00               23599499
874646553       Open      6223.50               94744663

Thanks,

Моя задача состоит в том, чтобы извлечь номера счетов-фактур, которые в данном случае являются 646464646,645543333 и 874646553. После просмотра нескольких примеров я знаю, что они обычно находятся в следующей строке, за которой следует заголовок, такой как номер счета-фактуры # или номера счета-фактуры и т. Д.

Я пытаюсь использовать регулярные выражения для решения этой проблемы, но я не могу создать решение, которое может соответствовать ключевому слову, например "Invoice #" в заголовке, и извлекать числа чуть ниже этого заголовка ( может быть N количество строк в снимке таблицы )

Мой желаемый вывод из этого примера:

[646464646,645543333,874646553]

Я пытался найти любое существующее решение, но не нашел ни одного примера для соответствия в тексте новой строки, пожалуйста, предложите, если у вас есть идея, как решить эту проблему.

Пожалуйста, дайте мне знать, если потребуется дополнительная информация. Спасибо.

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

1 Ответ

1 голос
/ 03 июня 2019

Попробуйте сначала разбить входную строку / файл на Invoice#, затем используйте re.findall для второй записи в списке:

parts = input.split("Invoice#")
numbers = re.findall(r'(\d+)       (?:Open|Closed)', parts[1])

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

numbers = re.findall(r'\d{9}', parts[1])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...