正则表达式 - 测试String是否包含另一个String

时间:2010-10-20 13:48:48

标签: python regex string

假设你有一些这个字符串(一行)

  

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之间提取部分(即某些网址),但前提是它包含“拼图”一词。你会如何在Python中使用正则表达式?

到目前为止,这是我的解决方案。

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

它有效,但我有一些想法,我必须将第一个/第二个/ .*更改为.*?,以使它们不贪婪。在这种情况下它真的重要吗?

3 个答案:

答案 0 :(得分:5)

不需要正则表达式

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

答案 1 :(得分:2)

这很重要。用户代理可以包含任何内容。对这两者都使用非贪婪。

答案 2 :(得分: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/'