Использование re.findall
>>> sample = 'includegraphics[x=2]{image.pdf}'
>>> re.findall('includegraphics.*?{(.*?)}',sample)
['image.pdf']
Объяснение:
re
module имеет дело с регулярными выражениями в Python. Его метод findall
полезен для поиска всех вхождений шаблона в строке.
Регулярное выражение для картины, которую вас интересует, это 'includegraphics.*?{(.*?)}'
. Здесь .
символизирует «любой символ», а *
означает 0 или более раз. Вопросительный знак делает это ненасытной операцией. Из документации:
В *
, +
и ?
отборочные все жадные; они соответствуют максимально возможному числу . Иногда такое поведение нежелательно; если RE <.*>
соответствует <H1\>title</H1>
, он будет соответствовать всей строке , а не только <H1>
. Добавление ?
после того, как квалификатор делает его выполняет матч в неживой или минимальной моде; так как количество символов возможно будет соответствовать. Использование .*?
в предыдущем выражении будет соответствует только <H1>
.
Пожалуйста, обратите внимание, что если в вашем случае, используя .*?
должно быть хорошо, в общем, лучше использовать более специализированные группы символов, такие как \w
для буквенно-цифровых символов и \d
для цифр, когда вы знаете, что содержание будет состоять из заранее.
Я действительно не понимаю, что вы хотите сделать. Если вы просто хотите извлечь image.pdf, вы можете использовать indexOf. – JonathanG