zoukankan      html  css  js  c++  java
  • 关于Re模块的一些基础知识(另附一段批量抓代理ip的代码)

    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+'
    ')
    	f.close
    if __name__ == '__main__':
    	save_ip()	
    
  • 相关阅读:
    Win32串口API
    Windows核心编程 第4章 进程
    大家都来吐槽下12306的网站bug吧
    HttpRequest模拟Post和Get提交代码
    jquery.masonry + jquery.infinitescroll 实现瀑布流布局
    三层架构之泛型应用
    listView 中,大图标时,各个图标之间间距的控制
    Windows Phone APP的设计过程
    分享三个小故事
    最值得创业者聆听的10大TED演讲(中文字幕视频)
  • 原文地址:https://www.cnblogs.com/Dleo/p/5509452.html
Copyright © 2011-2022 走看看