2015-12-22 4 views
2

я имел это работает нормально в py2.7, но у меня возникают проблемы при получении его в настоящее время работают в в PY3 с изменениями в регулярном выраженииPython 3 найти строку между двумя точками

я просто хочу строку " voltaire "вернулся из имени файла

gpxFileName = '235235voltaire.gpx' 
m=re.search('(?<=[0-9]).*?(?=.gpx)',gpxFileName) 
print (m.group(1)) 

выше код успешно отсекает от с .gpx штрафа, но цифра остаться в

:(

я торчу на этом для waaaaay слишком долго, и его УБИВАЕТ меня. Wot am i missing

Кстати, я также попытался

m=re.search('(?<=[0-9])\w+',gpxFileName) 

и

m=re.search('(?<=\d).*(?=.gpx)',gpxFileName) 

ответ

4

Вы должны использовать capturing groups:

>>> import re 
>>> s = '235235voltaire.gpx' 
>>> re.search(r'\d+(\w+)\.gpx', s).group(1) 
'voltaire' 

Здесь мы извлекаем один или несколько буквенно-цифровых символов сразу после одного или больше цифр и непосредственно перед .gpx (точка должна быть экранирована, так как она имеет специальный mea ning).

+0

Вы абсолютная легенда! Благодарю. Так что я тоже узнаю, что вы подразумеваете под захватом? – user2206361

+0

@ user2206361 спасибо, курсивный шрифт - это просто акцент. – alecxe

+0

OK i geddit, что точка имеет особое значение, но (? =. Gpx) была частью, которая успешно работала - это были номера, которые не были сокращены. О, и вы можете объяснить ... Я думаю, что «+» означает любую длину ... правильно? – user2206361

Смежные вопросы