Включить всю строку при использовании re.findall, чтобы найти строку между символами - PullRequest
0 голосов
/ 11 ноября 2019

При использовании re.findall, как в моем примере ниже, есть ли возможность включить последние четыре символа (.JPG)? Поскольку они могут быть строчными или заглавными, я не могу просто сшить их вместе с другой строкой и быть уверенным, что это будет правильно. (На самом деле это список из десятков / сотен JPG, несколько заглавных и строчных букв.)

Я действительно нашел ответ на это около 2 недель назад, но с тех пор потерял его (несмотря на большое количество поисков в Google).

Я много занимался поиском / чтением и извиняюсь, если эту проблему уже задавали раньше.

import re

examplestring = '/home/folder/image.JPG 200x400 20/12/2018'

print(re.findall(r'^(.*?).jpg', examplestring, flags=re.IGNORECASE))

Фактический результат:

['/home/folder/image']

I 'м, желая, чтобы результат был:

['/home/folder/image.JPG']

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

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

Либо включите .jpg в группу

^(.*?\.jpg)

, либо не используйте группу ввсе

^.*?\.jpg
0 голосов
/ 11 ноября 2019

Метод 1

Может быть,

(?i)\S+\.jpg

или

(?i)\S+\.jpe?g

на всякий случай, если бы у нас было jpeg, могло бы просто работать ОК.

Демонстрация RegEx 1

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

Кроме того, выражение не работает, если в именах или именах файлов есть пробелы.


Метод 2

Если в пути изображения будут горизонтальные пробелы, то

(?i)^[^\r\n]+\.jpg

или

(?i)^[^\r\n]+\.jpe?g

было бы несколько вариантов для изучения.

Демонстрация RegEx 2

Тест

import re

string = '''
/home/folder/image.JPG 200x400 20/12/2018
  /home/folder/image.jpg 200x400 20/12/2018
  /home/folder/image.jpeg 200x400 20/12/2018
'''

expression = r'(?i)\S+\.jpe?g'

print(re.findall(expression, string))

Выход

['/home/folder/image.JPG', '/home/folder/image.jpg', '/home/folder/image.jpeg']

Если вы хотите упростить /измените / изучите выражение, это было объяснено на верхней правой панели regex101.com . Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.


RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

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