matthewgall
matthewgall

Reputation: 125

Python regex not working

I am using the following code:

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

However, when I pass it the following string:

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

It finds nothing, when I'm expecting it to find: http://uploadir.com/u/bb41c5b3. What am I doing wrong?

I have tested the regex using http://gskinner.com/RegExr/ and it seems to be correct. Am I missing something here?

Upvotes: 12

Views: 27408

Answers (2)

unutbu
unutbu

Reputation: 880987

Get in the habit of making all regex patterns with raw strings:

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']

The difference is due to \b being interpreted differently:

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

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

'\b' is an ASCII Backspace, while r'\b' is a string composed of the two characters, a backslash and a b.

Upvotes: 13

joksnet
joksnet

Reputation: 2325

>>> 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']
>>> 

Upvotes: 9

Related Questions