Регулярное выражение не является хорошим выбором для этого, потому что 1) параметры могут появляться в любом порядке, и 2) вам нужно сделать дополнительные проверки для разделителей запросов, чтобы вы не соответствовали потенциальным странностям, таким как "flu = userpage","sp = 1", "u = userpage% 20haha" или "s = 123".( Примечание: Я пропустил два из этих случаев в моем первом проходе! Как и другие.) Кроме того: 3) у вас уже есть хорошая библиотека для разбора URL-адресов в Python, которая работает за вас.
С помощью regex вам нужно что-то неуклюжее, например:
q = re.compile(r'([?&]u=userpage&(.*&)?p=1(&|$))|([?&]p=1&(.*&)?u=userpage(&|$))')
return q.search(href) is not None
С помощью urlparse вы можете сделать это.urlparse дает вам немного больше, чем вы хотите, но вы можете использовать вспомогательную функцию, чтобы сохранить результат простым:
def has_qparam(qs, key, value):
return value in qs.get(key, [])
qs = urlparse.parse_qs(urlparse.urlparse(href).query)
return has_qparam(qs, 'u', 'userpage') and has_qparam(qs, 'p', '1')