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()