Regex, чтобы вернуть все символы до "/" поиска в обратном направлении - PullRequest
2 голосов
/ 22 июня 2011

У меня проблемы с этим регулярным выражением, и я думаю, что я почти на месте.

m =re.findall('[a-z]{6}\.[a-z]{3}\.[a-z]{2} (?=\" target)', 'http://domain.com.uy " target')

Это дает мне "точный" вывод, который я хочу.это domain.com.uy, но, очевидно, это всего лишь пример, поскольку [a-z]{6} просто соответствует предыдущим 6 символам, и это не то, что я хочу.

Я хочу, чтобы он возвращал domain.com.uy, поэтому в основном инструкция будет соответствует любому символу до "/" (назад).

Редактировать:

m =re.findall('\w+\.[a-z]{3}\.[a-z]{2} (?=\" target)', 'http://domain.com.uy " target')

Очень близко к тому, что я хочу, но не будет соответствовать "_" или"-".

Ради полноты я не нуждаюсь в http://

Надеюсь, вопрос достаточно ясен, если я оставлю что-нибудь открытое для интерпретациипожалуйста, попросите разъяснений!

Спасибо заранее!

Ответы [ 4 ]

1 голос
/ 22 июня 2011

Если регулярные выражения не обязательны, и вы просто хотите извлечь полное доменное имя из URL-адреса в Python. Используйте urlparse и str.split():

>>> from urlparse import urlparse
>>> url = 'http://domain.com.uy " target'
>>> urlparse(url)
ParseResult(scheme='http', netloc='domain.com.uy " target', path='', params='', query='', fragment='')

Это разбило URL на составные части. Мы хотим netloc:

>>> urlparse(url).netloc
'domain.com.uy " target'

Разделить на пробелы:

>>> urlparse(url).netloc.split()
['domain.com.uy', '"', 'target']

Просто первая часть:

>>> urlparse(url).netloc.split()[0]
'domain.com.uy'
1 голос
/ 22 июня 2011

Другой вариант - использовать положительный вид сзади , например (?<=//):

>>> re.search(r'(?<=//).+(?= \" target)', 
...           'http://domain.com.uy " target').group(0)
'domain.com.uy'

Обратите внимание, что при желании это будет совпадать с косой чертой внутри самого URL:

>>> re.search(r'(?<=//).+(?= \" target)',
...           'http://example.com/path/to/whatever " target').group(0)
'example.com/path/to/whatever'

Если вы просто хотели получить пустой домен, без каких-либо путей или параметров запроса, вы можете использовать r'(?<=//)([^/]+)(/.*)?(?= \" target)' и захватить группу 1:

>>> re.search(r'(?<=//)([^/]+)(/.*)?(?= \" target)',
...           'http://example.com/path/to/whatever " target').groups()
('example.com', '/path/to/whatever')
0 голосов
/ 22 июня 2011

Это так просто:

[^/]+(?= " target)

Но учтите, что http://domain.com/folder/site.php не вернет домен.И не забудьте правильно экранировать регулярное выражение в строке.

0 голосов
/ 22 июня 2011

попробуйте это (возможно, вам нужно экранировать / в Python):

/([^/]*)$
...