Подтвердить что ты не робот

Извлечь строку с Python re.match

import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"

str2=re.match("[a-zA-Z]*//([a-zA-Z]*)",str)
print str2.group()

current result=> error
expected => wwwqqqzzz

Я хочу извлечь строку wwwqqqzzz. Как я это делаю?

Возможно, есть много точек, например:

"whatever..s#[email protected]:af//wwww.xxx.yn.zsdfsd.asfds.f.ds.fsd.whatever/123.dfiid"

В этом случае я в основном хочу, чтобы материал ограничивался // и /. Как мне это достичь?

Еще один вопрос:

import re
str="xxx.yyy.xxx:80"

m = re.search(r"([^:]*)", str)
str2=m.group(0)
print str2
str2=m.group(1)
print str2

Кажется, что m.group(0) и m.group(1) совпадают.

4b9b3361

Ответ 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)

Ответ 3

output=re.findall("(?<=//)\w+.*(?=/)",str)

final=re.sub(r"[^a-zA-Z0-9]+", "", output [0])

print final

Ответ 4

import re
str="x8f8dL:s://www.qqq.zzz/iziv8ds8f8.dafidsao.dsfsi"
re.findall('//([a-z.]*)', str)