Python 正则表达式-测试一个字符串是否包含另一个字符串
假设您有一些字符串(一行) 10.254.254.28--[06/Aug/2007:00:12:20-0700]“获取 /keyser/22300/HTTP/1.0“302 528”-” “Mozilla/5.0(X11;U;Linux i686 (x86_64);欧洲-美国;rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4“ 您希望提取GET和HTTP之间的部分(即某个url),但前提是它包含单词“puzzle”。如何在Python中使用正则表达式实现这一点 这是我目前的解决方案Python 正则表达式-测试一个字符串是否包含另一个字符串,python,regex,string,Python,Regex,String,假设您有一些字符串(一行) 10.254.254.28--[06/Aug/2007:00:12:20-0700]“获取 /keyser/22300/HTTP/1.0“302 528”-” “Mozilla/5.0(X11;U;Linux i686 (x86_64);欧洲-美国;rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4“ 您希望提取GET和HTTP之间的部分(即某个url),但前提是它包含单词“puzzle”。如何在Python中使用正则表达式实现这一点
match=re.search(r'GET(.*puzzle.*)HTTP',my_string)
这是可行的,但我有一个想法,我必须将第一个/第二个/两个*
更改为*?
,以使它们不贪婪。在这种情况下它真的重要吗?不需要正则表达式
>>> 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"
...
这很重要。用户代理可以包含任何内容。对这两个字符串都使用non-greedy。在其当前形式中,只有在一行中有多个GET-HTTP字符串时才有意义,我怀疑这一行中永远不会有GET-HTTP字符串。不过,将其设置为非贪婪会更安全。只希望您的服务器管理员不会更改日志格式:)日志消息有时在两个破折号之间有非空白内容,这会使拆分中的索引失效。
>>> 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/'