Ответ 1
match
пытается сопоставить строку целиком. Вместо этого используйте search
. Следующий шаблон будет соответствовать вашим требованиям:
m = re.search(r"//([^/]*)", str)
print m.group(1)
В принципе, мы ищем /
, а затем потребляем как можно больше символов без косой черты. И эти символы без косой черты будут записаны в группу номер 1.
На самом деле, есть несколько более продвинутый метод, который делает то же самое, но не требует захвата (что обычно занимает много времени). Он использует так называемый lookbehind:
m = re.search(r"(?<=//)[^/]*", str)
print m.group()
Оценки не включены в фактическое совпадение, следовательно, желаемый результат.
Это (или любое другое разумное решение регулярных выражений) не удалит .
сразу. Но это можно сделать на втором шаге:
m = re.search(r"(?<=//)[^/]*", str)
host = m.group()
cleanedHost = host.replace(".", "")
Это даже не требует регулярных выражений.
Конечно, если вы хотите удалить все, кроме букв и цифр (например, чтобы превратить www.regular-expressions.info
в wwwregularexpressionsinfo
), вам лучше использовать версию регулярного выражения replace
:
cleanedHost = re.sub(r"[^a-zA-Z0-9]+", "", host)