2015-08-09 3 views
0

У меня, вероятно, отсутствует что-то очень основное здесь, но здесь идет:re.findall работает в консоли, но не в скрипте?

Я использую Python 2.7 и regex для идентификации цифр внутри строки.

В консоли, я печатаю:

>>> newstr = 'NukeNews/File_132.txt' 
>>> int(re.findall(r'\d+',newstr)[0]) 
132 

Что я ожидаю.

Однако, в скрипте, который я запускаю, у меня есть строки, хранящиеся в словаре, linedict. Я бегу этот сценарий:

news_id=[] 

for line in line_vec: 
    print linedict[line] 
    newstr= linedict[line] 
    id_int = re.findall('r\d+',newstr) 
    print id_int 
    news_id.append(id_int) 

Это длинный список, но результат выглядит:

NukeNews/File_132.txt 
[] 

Так что - правильная строка зарегистрирована, но это не соответствует ни на что.

Я сначала вызывал первый элемент в списке (для ввода консольного ввода int(re.findall(r'\d+',newstr)[0]), но скрипт сообщает мне, что в регулярном выражении не было никаких экземпляров цифр в строке. вернуться:.
NukeNews/File_132.txt [ «132»]

Любая идея, почему это не работает, как ожидалось При попытке запуска re.match(r'/d+',newstr) я получаю пустую группу (следуя примеру группы по https://docs.python.org/2/library/re.html)

Редактировать: Как указано, t его случай не быть осторожным с 'r' и r'*'. Я просто собираюсь оставить это на случай, если кто-то еще пойдет в Google «почему мое регулярное выражение работает в консоли, но не в скрипте» забывает проверить эту опечатку, как и я.

ответ

2

У вас есть свой r внутри кавычки, вместо того, чтобы получить «сырую строку» вы получаете строку с 'r' в нем ...

id_int = re.findall('r\d+',newstr) 
#     ^
# should be: 
id_int = re.findall(r'\d+',newstr) 

ваш «консольный» версия также только занимает первое найденное совпадение по сравнению с вашей «скриптовой» версией, которая добавляет весь список.

+0

О, да, это унизительно. Спасибо. Это была именно эта проблема. :) – zainksasdf