Удалить подстроку с обоих концов строки

1

У меня есть имя файла, в котором есть некоторые лишние слова, от которых я хочу избавиться: VIS, THE и т.д.

Я был этим регулярным выражением, но проблема в том, что слова, которые нужно удалить, могут отображаться в начале или в конце имени файла. Чтобы сделать более ясным, некоторые образцы имен файлов:

filenames = ['a_VIS-MarnehNew_24RGB_1110.jpg',
             'Marne_04_Vis.jpg',
             'VIS_jeep_smoke.jpg',
             'IR_fk_ref_01_005.jpg',
             'c_LWIR-MarnehNew_24RGB_1110.jpg',
             'LWIR-MarnehNew_15RGB_603.jpg',
             'Movie_01_IR.jpg',
             'THE_fk_ge_03_005.jpg']

И лишние слова - это VIS, Vis, IR, LWIR, THE и каждый персонаж перед ними, если они появляются спереди или каждый символ после них, если они появляются сзади.

Правильными примерами будут:

filenames = ['MarnehNew_24RGB_1110',
             'Marne_04',
             'jeep_smoke',
             'fk_ref_01_005',
             'MarnehNew_24RGB_1110',
             'MarnehNew_15RGB_603',
             'Movie_01',
             'fk_ge_03_005']

Я пробовал этот код, но (очевидно, этого недостаточно для задних случаев:

import re
pattern = re.compile('(?:VIS|Vis|IR|LWIR)(?:-|_)(\w+)')

for i, filename in enumerate(filenames):
    matches = re.search(pattern, filename)
    if matches:
        print(i, matches.group(1))

0 MarnehNew_24RGB_1110
2 jeep_smoke
3 fk_ref_01_005
4 MarnehNew_24RGB_1110
5 MarnehNew_15RGB_603

Итак, как мне удается также избавиться от задних слов?

  • 1
    Почему a_VIS- удаляется из первого примера? Это не соответствует шаблону.
  • 0
    Что вы имеете в виду. Желаемый шаблон или шаблон, который я предоставляю? Для последнего я не уверен, почему быть честным (я не эксперт по регулярным выражениям)
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

Используя ваши примеры, вы можете использовать

(?:^(?:\w_)?(?:VIS|Vis|IR|LWIR|THE)[-_]?)
|
(?:_?(?:VIS|Vis|IR|LWIR))?\.jpg$

Который должен быть заменен ничем, см. Демонстрацию на regex101.com.


Разбитое это говорит:
(?:                          # non-capturing group
    ^                        # anchor at the beginning of a string
    (?:\w_)?                 # \w_ optional
    (?:VIS|Vis|IR|LWIR|THE)  # one of ...
    [-_]?                    # - or _ optional
)
|                            # OR
(?:
    _?
    (?:VIS|Vis|IR|LWIR)
)?
\.jpg$
  • 0
    В тестовых примерах OP отсутствует реальный регистр для каждого символа после них, если они появляются сзади, например, abcdef_VIS_a.jpg . Я также не совсем уверен, может ли каждый символ до этого быть прочитан как только 1 символ, но опять же тестовые примеры, кажется, подразумевают это (или не достаточно хороши). Но я мог бы также подумать об этом.
  • 0
    @SebastianProske: Давайте подождем и посмотрим - в противном случае я удалю этот ответ.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню