Вопрос:

Соответствие регулярного выражения Python 3.5 для каталогов

python regex

343 просмотра

2 ответа

1104 Репутация автора

Я использую reмодуль Python 3.5 с этим кодом:

>>> test
'\\\\192.168.1.2\\shared\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf'

Я хочу вернуться Department\Travel\FY 2015\Travel Expense Statement Jul 25 2019.pdf. Я пробовал следующее регулярное выражение, но продолжаю получать ошибки, такие какsre_constants.error: nothing to repeat at position 12

x=re.compile( "shared\\[^\\](*?)" )
print( x.findall(test) )

или пустой результат ['']для:

x=re.compile( "shared\\\(.*?)" )

Как я могу выполнить эту операцию?

Автор: jftuga Источник Размещён: 22.08.2016 08:43

Ответы (2)


2 плюса

96093 Репутация автора

Решение

Проблема с вашим регулярным выражением очень проста, удалите ?символ во втором регулярном выражении. Вам просто нужно, .*чтобы оно соответствовало нулю или более символов.

*?вместе означает ленивый квантификатор, который соответствует как можно меньшему количеству, поэтому, если вы используете .*?, это означает «ноль или более любых символов, но как можно меньше». Что касается первого регулярного выражения, то у *него нет предшествующего атома, к которому оно может быть применено, отсюда и ошибка.


В общем случае вам лучше использовать ntpathмодуль, как в ответе Кеннимма .

Автор: Antti Haapala Размещён: 22.08.2016 08:47

3 плюса

425118 Репутация автора

Вы не должны использовать регулярные выражения для этого. Вместо этого используйте ntpathмодуль (или, os.pathесли вы уверены, что скрипт будет работать только в Windows):

>>> s = '\\\\192.168.1.2\\shared\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf'
>>> import ntpath
>>> ntpath.splitdrive(s)
('\\\\192.168.1.2\\shared', '\\Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf')
>>> ntpath.splitdrive(s)[1][1:]
'Department\\Travel\\FY 2015\\Travel Expense Statement Jul 25 2019.pdf'
Автор: kennytm Размещён: 22.08.2016 08:48
Вопросы из категории :
32x32