Регулярные выражения - тестирование, если строка содержит другую строку - PullRequest
0 голосов
/ 20 октября 2010

Предположим, у вас есть эта строка (одна строка)

10.254.254.28 - - [06 / Aug / 2007: 00: 12: 20 -0700] "GET / keyser / 22300 / HTTP/1.0 "302 528" - "" Mozilla / 5.0 (X11; U; Linux i686 (x86_64); en-US; rv: 1.8.1.4) Gecko / 20070515 Firefox / 2.0.0.4 "

и вы хотите извлечь часть между GET и HTTP (то есть, некоторый URL), но только если он содержит слово «головоломка».Как бы вы сделали это, используя регулярные выражения в Python?

Вот мое решение до сих пор.

match = re.search(r'GET (.*puzzle.*) HTTP', my_string)

Это работает, но у меня есть кое-что, что я долженизмените первый / второй / оба .* на .*?, чтобы они не были жадными.Это действительно имеет значение в этом случае?

Ответы [ 3 ]

5 голосов
/ 20 октября 2010

Не нужно регулярное выражение

>>> s
'10.254.254.28 - - [06/Aug/2007:00:12:20 -0700] "GET /keyser/22300/ HTTP/1.0" 302 528 "-" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"'

>>> s.split("HTTP")[0]
'10.254.254.28 - - [06/Aug/2007:00:12:20 -0700] "GET /keyser/22300/ '

>>> if "puzzle" in s.split("HTTP")[0].split("GET")[-1]:
...   print "found puzzle"
...
2 голосов
/ 20 октября 2010

Это имеет значение. Пользователь-агент может содержать все, что угодно. Используйте не жадный для них обоих.

1 голос
/ 20 октября 2010
>>> s = '10.254.254.28 - - [06/Aug/2007:00:12:20 -0700] "GET /keyser/22300/ HTTP/1.0" 302 528 "-" "Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"'
>>> s.split()[6]
'/keyser/22300/'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...