2010-10-20 4 views
0

Supposons que vous ayez une cette chaîne (une ligne)expressions régulières - tester si une chaîne contient une autre chaîne

10.254.254.28 - - [06/Août/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 "

et vous voulez extraire la partie entre le GET et le HTTP (c'est-à-dire un peu d'URL) mais seulement si elle contient le mot" puzzle ". Comment feriez-vous cela en utilisant des expressions régulières en Python?

Voici ma solution jusqu'à présent.

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

Il fonctionne, mais j'ai quelque chose à l'esprit que je dois changer la première/seconde/les deux .*-.*? afin qu'ils soient non avides. Cela a-t-il vraiment de l'importance dans ce cas?

+0

espère juste que votre admin serveur ne change pas le journal formatage :) –

Répondre

5

Pas besoin regex

>>> 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

Il importe. L'utilisateur-agent peut contenir n'importe quoi. Utilisez non-gourmand pour les deux.

+0

Dans sa forme actuelle, il ne les questions s'il y aurait plus d'une des chaînes GET HTTP dans une seule ligne Wich je doute qu'il y ait jamais sera. Ce serait le choix le plus sûr pour le rendre non-gourmand. –

1
>>> 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/' 
+0

Les messages de journal ont parfois un contenu non vide entre les deux tirets, ce qui désactive l'indexation dans votre groupe. – PaulMcG

+0

rien de trivial si la déclaration ne serait pas corriger – SilentGhost

Questions connexes