1.常用匹配规则

. 表示任意字符
[0-9] 用来匹配一个指定的字符类别
[^5]表示除了5之外的其他字符,^不在字符串的开头,则表示它本身。
* 对于前一个字符重复0到无穷次
+ 对于前一个字符重复1到无穷次
?对于前一个字符重复0到1次
{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} = , {0,1} = ?
{m} 对于前一个字符重复m次
| 表示"或"
python默认开启了贪婪模式的,.+?,.*?,??  #其中?表示开启非贪婪模式,也就是说只匹配一次

\d 匹配任何十进制数;它相当于类 [0-9]
\D 匹配任何非数字字符;它相当于类 [^0-9]
\s 匹配任何空白字符;它相当于类 [ fv]
\S 匹配任何非空白字符;它相当于类 [^ fv]
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]

2.re模块常用方法

re.match(pattern, string, flags=0)   match只有当且仅当被匹配的字符串开头就能匹配

re.search(pattern, string, flags=0)   任意位置匹配,返回_sre.SRE_Match对象

re.compile(pattern, flags=0)         编译正则表达式
    prog = re.compile(pattern)
    result = prog.match(string)
    等价于
    result = re.match(pattern, string)

re.split(pattern, string, maxsplit=0) 通过正则表达式将字符串分离
    >>> re.split('\W+', 'Words, words, words.')
    ['Words', 'words', 'words', '']

re.findall(pattern, string, flags=0)  找到 RE 匹配的所有子串,并把它们作为一个列表返回

re.finditer(pattern, string, flags=0)  找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。

re.sub(pattern, repl, string, count=0, flags=0) 找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。

re.subn(pattern, repl, string, count=0, flags=0) 与re.sub方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。

re.escape(string)对字符串中的非字母数字进行转义

re.purge() 清空缓存中的正则表达式

3.正则表达式对象
re.RegexObject
re.compile()返回RegexObject对象

re.MatchObject
group()返回被 RE 匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元组包含匹配 (开始,结束) 的位置

>>> import re
>>> a = re.search('a','abc')
>>> a.group()
'a'
>>> b = re.findall('b','abc')
>>> b
['b']

抓代理ip的代码区

import urllib
import urllib2
import re def url_open(url):
req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0')
response = urllib2.urlopen(req)
html = response.readline()
save_ip_list = []
while html:
ip = re.search(r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])',html)
if ip:
now_ip = ip.group()
p = re.findall(r'<td>(.+?)</td>',response.readline())
for port in p:
list = str(now_ip)+":"+str(port)
print list
save_ip_list.append(list) html = response.readline()
return save_ip_list def save_ip():
url = "http://www.xicidaili.com/nt/2"
save_ip_list = url_open(url)
f = open('test.txt','w')
for i in save_ip_list:
f.write(i+'\n')
f.close
if __name__ == '__main__':
save_ip()

关于Re模块的一些基础知识(另附一段批量抓代理ip的代码)的更多相关文章

  1. VIM基础知识整理(附思维导图)

    这是当时初学VIM后做的一个思维导图,图片稍大,所以从freemind导出了html文本po在下面:图片在最下方,放大可清晰浏览. VIM 普通模式 普通编辑命令 功能:浏览,普通编辑 x:删除光标所 ...

  2. python基础学习1-网络爬虫程序中的代理IP设置

    #!/usr/bin/env python # -*- coding:utf-8 -*-网络爬虫代理 import urllib.request import random url="htt ...

  3. Python基础知识详解 从入门到精通(七)类与对象

    本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详 ...

  4. 基础知识javascript--事件

    群里有一个小伙伴在处理事件监听函数的时候,遇到了一点问题,正好我比较空闲,于是帮他指出了代码中的问题,顺便整理一下,方便以后遇到类似问题的伙伴们有一个参考. 这是一个很简单的问题,对于基础知识比较杂实 ...

  5. C#网络编程基础知识

    C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...

  6. Linux运维笔记(一)网络基础知识

    网络基础知识 一.基本概念 1.ARPANET & TCP/IP:以“软件”技术将网络硬件整合,使得不同的计算机或者数据可以通过这个软件达成数据沟通(TCP/IP技术也被称为Internet) ...

  7. Java网络编程一:基础知识详解

    网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------ ...

  8. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...

  9. ansible学习基础知识和模块(一)

    基础知识补充: 常用自动化运维工具 Ansible:使用python来开发的,无需设置Agentless(代理),一般管理几百台.与ssh的方式也不一样,ssh是基于c/s模式(客户端+服务器)来使用 ...

随机推荐

  1. 小程序解密 encryptedData 获取 unionID 等信息

    index.php <?php include_once "wxBizDataCrypt.php"; // $appid 由小程序微信官方后台获取 $appid = 'wx4 ...

  2. Node.js系列——(3)连接DB

    背景 node.js,有人称之为运行在服务器端的JavaScript.以往我们使用JavaScript时,都是依赖后端查询数据库并返回数据,而JavaScript只需要展示即可.问题来了,就不能绕开后 ...

  3. mysql 慢查询,查询缓存,索引,备份,水平分割

    1.开启慢查询 在mysql的配置文件my.ini最后增加如下命令 [mysqld]port=3306slow_query_log =1long_query_time = 1 2.查看慢查询记录 默认 ...

  4. C语言添加宏开关

    原文地址:http://blog.csdn.net/cp1300/article/details/7773239 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是 ...

  5. rxjs5.X系列 —— ErrorHandling/Condition/Mathematical系列 api 笔记

    欢迎指导与讨论 : ) 前言 本文是笔者翻译 RxJS 5.X 官网各类operation操作系列的的第四篇 —— ErrorHanding异常处理.Condition Operator情况操作.Ma ...

  6. Delphi通过ADO链接数据库及对数据库的增加,删除,修改,读取操作实例教程4

    ADO是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据.ADO(ActiveXDataObjects,ActiveX数据对象)是Microsoft提出的应用程序接口(API)用以实现访问关 ...

  7. postman 上一个接口返回值传给下一个接口

    问题:如何将A请求responseBody中的token传入B请求中的request中 把A请求中的token设置为环境变量,如下: tests["Status code is 200&qu ...

  8. python获取toast 验证

    appium版本 1.6.3  desired_caps['automationName']='uiautomator2'    def _find_toast(self,message,timeou ...

  9. Vue 取出记录数后,页面显示刚开始显示部分,点击更多显示全部

    实例的实现,是使用computed计算属性,还有对数组使用.slice函数,不改变原数据对象. <div id="app"> <ul> <li v-f ...

  10. 使用cookie保存用户登录信息

    写入Cookie HttpCookie _cookie = new HttpCookie("User"); _cookie.Values.Add("UserName&qu ...