2011-01-15 2 views
7

Я использую следующий код:Python регулярное выражение не работает

downloadlink = re.findall("http://uploadir.com/u/(.*)\b", str(downloadhtml)) 

Однако, когда я прохожу его следующую строку:

<input type="text" value="http://uploadir.com/u/bb41c5b3" /> 

Он не находит ничего, когда я ожидал его найти : http://uploadir.com/u/bb41c5b3. Что я делаю не так?

Я проверил регулярное выражение, используя http://gskinner.com/RegExr/, и это кажется правильным. Я что-то упустил?

ответ

6
>>> import re 
>>> html = '<input type="text" value="http://uploadir.com/u/bb41c5b3" />'; 
>>> regex = r'http://uploadir.com/u/([^"]+)' 
>>> link = re.findall(regex, html) 
>>> link 
['bb41c5b3'] 
>>> 
+0

Вы гений! Большое спасибо! Подождите 5 минут, отметьте как фиксированный>.> – matthewgall

6

Получить в привычку делать все регулярные выражения с сырыми строками:

In [16]: re.findall("http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[16]: [] 

In [17]: re.findall(r"http://uploadir.com/u/(.*)\b", '<input type="text" value="http://uploadir.com/u/bb41c5b3" />') 
Out[17]: ['bb41c5b3'] 

Разница обусловлена ​​\b быть interpreted differently:

In [18]: '\b' 
Out[18]: '\x08' 

In [19]: r'\b' 
Out[19]: '\\b' 

'\b' является ASCII Backspace, а r'\b' является строка, состоящая из двух символов, обратная косая черта и b.

+0

Ваши строки идентичны, может быть, есть дополнительная 'r' на первой строке? –

+0

@Mark E: Спасибо. Исправленный. – unutbu

+0

Итак, сырые строки - это ключ .... Большое спасибо за вашу помощь! – matthewgall

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