У меня есть следующий текст (который был извлечен из тела письма с помощью 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 есть какая-то библиотека или внутренний метод, которые помогут мне в этом.

1
Sallyerik 16 Фев 2021 в 08:01

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
1
hussam 16 Фев 2021 в 06:03

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

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" и пробел, а затем удаляем любые потенциальные символы новой строки с правой стороны конца Струна.

1
thesturggler 16 Фев 2021 в 06:05
66218903