pythongrep先查找一个模式,然后再查找若干行b

2024-10-01 09:18:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是_grep -B14 MMA

我有一个网址,我打开,它吐出许多行。 我想

  1. 找到有“MMa”的行
  2. 然后在它前面打印第14行

我都不知道从哪里开始。在

import urllib
import urllib2

url = "https://longannoyingurl.com"

opts = {
  'action': 'Dump+It'
}
data = urllib.urlencode(opts)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
print  response.read() # gives the full html output

Tags: httpsimporturldataresponseurllib2urllibreq
3条回答

多亏了丹,我得到了结果

import urllib
import urllib2 
import re

url="https://somelongannoyingurl/blah/servlet"
opts = {
  'authid': 'someID',
   'action': 'Dump+It'
}
data = urllib.urlencode(opts)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)

lines = response.readlines()
r = re.compile(r'MMa')
for i in range(len(lines)):
  if r.search(lines[i]):
    line = lines[max(0, i-14)].strip()
    junk,mma = line.split('>')
    print mma.strip()

~

您可以使用^{}将单个字符串拆分为一系列行。可以使用^{}测试字符串是否与正则表达式匹配。找到匹配的行之后,可以向后索引到行列表中,以找到前面的第14行。在

不要只对响应对象执行一个空的read,而是调用readlines,然后在每一行运行一个正则表达式。如果行匹配,请在第14行之前打印它,但请检查是否没有负索引。E、 g

import re

lines = response.readlines()

r = re.compile(r'MMa')
for i in range(len(lines)):
    if r.search(lines[i]):
        print lines[max(0, i-14)]

相关问题 更多 >