Python имеет подстановочный знак, похожий на PowerShell? - PullRequest
2 голосов
/ 28 мая 2019

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

if($email.'Subject' -like 'Test Number:*') {...}

Это будет срабатывать для каждого письма с темой Test Number:, независимо от случайно сгенерированного числа, следующего за.

Из того, что я вижу, Python не просто имеет подстановочный знак, как в PowerShell -like и *. Это или я тупой и не могу найти это. Единственное, что я вижу, - это установка модулей для подстановки. Есть ли в Python встроенный шаблон?

1 Ответ

3 голосов
/ 28 мая 2019

Вы можете использовать startswith в вашем случае

email_subjects = ['Test:1', 'Test:25', 'not_valid!']
for email_subject in email_subjects:
    if email_subject.startswith('Test:'):
        print('valid email subjet', email_subject)
    else:
        print('invalid email subjet', email_subject)

Для заметки:

  • подстрока * эквивалентна string.startsWith(substring)
  • * подстрока эквивалентна string.endswith(substring)
  • * подстрока * эквивалентна substring in string

Если у вас есть более сложные паттерны, я предлагаю вам использовать модуль re. Например, вы хотите сопоставить каждое: 'Test:X с X числом от 1 до 25

import re

email_subjects = ['Test:1', 'Test:25', 'not_valid!', 'Test:52']
for email_subject in email_subjects:
    if re.search(''^Test:([0-9]|1[0-9]|2[0-5])$'', email_subject): # Compiles to a regular expression and looks for it in email_subject
        print('valid email subjet', email_subject)
    else:
        print('invalid email subjet', email_subject)

Распределение регулярных выражений:

  • ^ Начальный символьный матч
  • Test: Ваша строка, которую вы хотите соответствовать
  • ([0-9]|1[0-9]|2[0-5]): ваш диапазон, который означает: число от 0 до 9, или 1 и число от 0 до 9 (что означает от 10 до 19) или 2 и число от 0 до 5 (что означает от 20 до 25)
  • $ Конечный символ
...