Проблема в вашем втором регулярном выражении. Он соответствует всему запросу, поэтому использование re.sub()
заменит все это пустой строкой. То есть lookForPrefix('foobar?',listOfPrefixes)
вернет ''
. Вероятно, вы проверяете возвращаемое значение в if
, поэтому он оценивает пустую строку как ложную.
Чтобы решить эту проблему, вам просто нужно изменить второе регулярное выражение на \?\s*$
и использовать re.search()
вместо re.match()
, так как последний требует, чтобы ваше регулярное выражение совпадало с начала строки.
doSearch = { "text":"Search for: ", "url":"http://www.google.com/#&q=QUERY", "words":["^\?\s*","\?\s*$"] }
def lookForPrefix(query,listOfPrefixes):
for l in listOfPrefixes:
if re.search(l, query):
return re.sub(l,'', query)
return False
Результат:
>>> lookForPrefix('?foobar', doSearch["words"])
'foobar'
>>> lookForPrefix('foobar?', doSearch["words"])
'foobar'
>>> lookForPrefix('foobar', doSearch["words"])
False
РЕДАКТИРОВАТЬ: На самом деле, вы могли бы также объединить два регулярных выражения в одно: ^\?\s*|\?\s*$
. Это будет работать одинаково хорошо.