Negative lookahead assertion for all numbers and a quote is all that I think is needed"
user_re = re.compile('<a href(="/(?!(?:user/)?[0-9]+").+)"')
In [74]: [(url,user_re.match(url) and user_re.match(url).group(1)) for url in 
                 ['<a href="/user/15594243">',
                  '<a href="/user/15594243_">',
                  '<a href="/user/user15594243">',
                  '<a href="/user/1">',
                  '<a href="/user/15594243/add">',
                  '<a href="/item/15594243">',
                  '<a href="/a"',
                  '<a href="/15594243">']]
Out[74]: 
[('<a href="/user/15594243">', None),
 ('<a href="/user/15594243_">', '="/user/15594243_'),
 ('<a href="/user/user15594243">', '="/user/user15594243'),
 ('<a href="/user/1">', None),
 ('<a href="/user/15594243/add">', '="/user/15594243/add'),
 ('<a href="/item/15594243">', '="/item/15594243'),
 ('<a href="/a"', '="/a'),
 ('<a href="/15594243">', None)]
EDIT: I know my last edit does the regex twice but that is just for display purposes.