Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 9, 2014 15:21:48

darksmoke
Зарегистрирован: 2014-10-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Добрый день.
Не как не могу понять как составить регулярное выражение которое вернет имя файла.
Т.е. есть путь /home/test/soft/print.sh
как получить в переменную print.sh?

Отредактировано darksmoke (Окт. 9, 2014 15:23:20)

Офлайн

#2 Окт. 9, 2014 15:34:05

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

>>> reg=re.compile("\S+/(.+)")
>>> reg.match("/home/test/soft/print.sh").group(1)
'print.sh'
>>> os.path.basename("/home/test/soft/print.sh")
'print.sh'
>>> 



Офлайн

#3 Окт. 9, 2014 15:47:30

darksmoke
Зарегистрирован: 2014-10-03
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Ух ты! os.path.basename - это круто!
Спасибо!

Офлайн

#4 Окт. 9, 2014 23:16:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

darksmoke
как составить регулярное выражение
re.search(r'/(.*)$', s)



Офлайн

#5 Окт. 9, 2014 23:24:01

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

>>> re.search(r'/(.*)$', "/home/test/soft/print.sh").group()
'/home/test/soft/print.sh'
>>> 



Офлайн

#6 Окт. 9, 2014 23:57:07

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Надо было проверить.

>>> import re
>>> 
>>> s = 'abc/def/abc/file.txt'
>>> re.search(r'[^/]*$', s).group()
'file.txt'
>>>

Nata
reg=re.compile("\S+/(.+)")
Пути могут быть с пробелами.



Отредактировано py.user.next (Окт. 9, 2014 23:59:29)

Офлайн

#7 Окт. 10, 2014 00:20:11

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

py.user.next
Пути могут быть с пробелами.
да, верно
>>> reg=re.compile(".*/(.+)")
>>> re.search(reg, "/home/test/soft ware/print.sh").group(1)
'print.sh'
>>> 
Ваш все равно лучше…



Отредактировано Nata (Окт. 10, 2014 00:27:11)

Офлайн

#8 Окт. 10, 2014 13:35:57

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Регулярка приоритетнее сплиту?

>>> st = "/home/test/soft/print.sh"
>>> st.rsplit('/')[-1]
print.sh

Офлайн

#9 Окт. 10, 2014 17:33:27

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

Регулярное выражение, вернуть последнее совпадение.

Правильный ответ был дан с самого начала - os.path.basename, а это ребята уже просто развлекаются.

Офлайн

#10 Окт. 10, 2014 22:08:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

bs0d
st.rsplit('/')[-1]
Так а зачем делить по всем слешам? Нужно один раз отделить. :)

Nata
Ваш все равно лучше…
Ну, не факт, надо сначала сравнить по времени и памяти.



Отредактировано py.user.next (Окт. 10, 2014 22:09:27)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version