re.search получает последние 7 символов строки - PullRequest
1 голос
/ 10 марта 2020

В настоящее время мой скрипт ищет ES C в указанном c .xlsx имени файла и получает последние символы после того, что в моем случае является датой. Файл выглядит так: xxx_2392469513_1700001_ESC_2020_01.xlsx

filenames = os.listdir(os.path.join(path, path2, path3, path4))
for filename in filenames:
    getdate = re.search('(?<=ESC_)\w+', filename)

    #Replace '_' with '-'
    if getdate:
        date = getdate.group(0).replace('_', '-')
        print('The following ESC file has date', date)

"The following ESC file has date 2020-01"

С этим я получаю дату. Однако я заметил, что не у каждого имени файла есть дата после ES C, то есть xxx_2392469513_1700001_ESC_something_2020_01.xlsx. Но для меня крайне важно проверять имя файла только с ES C.

Как я могу получить последние 7 символов этого имени с помощью re.search?

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Если вы хотите исправить свой текущий подход к регулярным выражениям, вы можете использовать

filenames = os.listdir(os.path.join(path, path2, path3, path4))
for filename in filenames:
    getdate = re.search('ESC_.*(.{7})\.[^.]+$', filename)
    if getdate:
        date = getdate.group(1).replace('_', '-')
        print('The following ESC file - {} - has {} date'.format(filename, date))
    else:
        print('No date found in {}'.format(filanme))

Шаблон ESC_.*(.{7})\.[^.]+$ соответствует

  • ESC_ - строка ESC_
  • .* - любые 0+ символов, кроме символов разрыва строки, как можно больше
  • (.{7}) - Группа захвата 1: любые семь символов, кроме символов разрыва строки
  • \. - точка
  • [^.]+ - 1+ символов кроме точки
  • $ - конец строки.
1 голос
/ 10 марта 2020

это требование регулярного выражения, это школьное задание? простое нарезание строк [-7:] дает вам последние 7 символов, если вам нужны только те, которые имеют ES C входную фильтрацию:

filenames = ['ESCdasdsadasd', 'yrfgreufre', 'dsfdESCfdgdf']
for filename in filenames:
  if 'ESC' in filename:
    print(filename[-7:])

, то будут напечатаны последние 7 символов строк, содержащих ES C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...