У меня есть следующий текст (который был извлечен из тела письма с помощью Exchangelib)
The following task were executed for department A . PLEASE STORED AS FOLLOWS
“Task done with APO”
APO Sent / A department Stored
VIA LOCAL MARKET
ACCOUNT 67805670-11
С помощью следующего базового кода я могу распечатать индекс, в котором найден шаблон.
body = receivedbody
result = body.find("ACCOUNT")
print(result)
Как я могу найти ACCOUNT
и распечатать число 67805670-11
, которое соответствует найденному шаблону?
В основном то, что я хотел сделать, - это взаимодействовать с телом, полученным с помощью Exchangelib, возможно, в Exchangelib есть какая-то библиотека или внутренний метод, которые помогут мне в этом.
2 ответа
Для этого вам нужно использовать регулярное выражение или повторно
text="""The following task were executed for department A . PLEASE
STORED AS FOLLOWS
“Task done with APO”
APO Sent / A department Stored
VIA LOCAL MARKET
ACCOUNT 67805670-11"""
import re
pattern = r"[\d]*-[\d]*"
text.findall(pattern=pattern, string=text)
['67805670-11']
Итак, что здесь происходит:
re.findall(pattern, string)
использует шаблон для определения части вашего текста, которая соответствует этому шаблону.
Шаблон r"[\d]*-[\d]*"
ищет строку, состоящую из нескольких цифр, за которыми следует тире, за которым следуют другие цифры. Я не уточнил, какова длина предыдущей и последующей цифр, но, конечно, можно.
Вы можете указать шаблон, который будет включать в себя наличие букв, разделенных пробелом от номера счета:
pattern = r"[\w]*\s*[\d]*-[\d]*"
re.findall(pattern=pattern, string=text)
['ACCOUNT 67805670-11']
Вы можете легко назначить вывод пространству имен:
output = re.findall(pattern=pattern, string=text)
if output != []:
print(f"The account number is {output.split(' ')[1]}")
The account number is 67805670-11
Если номер счета находится в конце строки, этот метод также работает. Примечание. Потребуется дополнительная работа, если номер учетной записи не находится в конце строки.
s = \
"""
The following task were executed for department A . PLEASE STORED AS FOLLOWS
“Task done with APO”
APO Sent / A department Stored
VIA LOCAL MARKET
ACCOUNT 67805670-11
"""
print(s[s.index("ACCOUNT") + len("ACCOUNT") + 1:].rstrip())
Функция index () возвращает индекс начала "ACCOUNT", а затем мы переходим к номеру счета, добавляя длину "ACCOUNT" и пробел, а затем удаляем любые потенциальные символы новой строки с правой стороны конца Струна.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.