匹配字符串
# coding:utf-8
# 导入正则表达式模块
import re
str1 = 'imooc python'
#------------第一种匹配方式-------------
# 使用re.compile()返回一个pattern对象
pa = re.compile(r'imooc')
# pa.match()方法匹配目标字符串,并返回一个match对象
ma = pa.match(str1)
# ma.group()里面是匹配的结果,如果没有匹配到返回None
ma.group()
# -----------第二种匹配方式---------------
ma2 = re.match(r'imooc','imooc python')
ma2.group()
正则表达式语法
| 字符 | 匹配 |
---|
. | 匹配任意字符(除了\n) |
[…] | 匹配任意字符集 |
\d/\D | 匹配数值/非数字 |
\s/\S | 匹配空白/非空白字符串 |
\w/\W | 匹配单词字符[a-zA-Z0-9]/非单词字符传 |
| 字符 | 匹配 |
---|
* | 匹配前一个字符0次或者无限次 |
+ | 匹配前一个字符1次或者无限次 |
? | 匹配前一个字符0次或者1次 |
{m}/{m,n} | 匹配前一个字符m次或者n次 |
*?/+?/?? | 匹配模式变为非贪婪(尽可能少匹配字符) |
| 字符 | 匹配 |
---|
^ | 匹配字符串开头,在多行模式中匹配每一行的开头 |
$ | 匹配字符串结尾,在多行模式中匹配每一行的结尾 |
\A/\Z | 指定的字符串比必须出现在开头/结尾 |
| 字符 | 匹配 |
---|
| | 匹配左右任意一个表达式 |
(ab) | 括号中表达式作为一个分组 |
\ | 引用编号为num的分组匹配到的字符串 |
(?P) | 分组起一个别名 |
(?P=name) | 引用别名为name的分组匹配字符串 |
| 字符 | 匹配 |
---|
re.I | 使得匹配对大小写不敏感 |
re.L | 做本地化识别(local-aware)匹配 |
re.M | 多行匹配,影响^ 和$ |
re.S | 使得. 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符串,这个标志影响\w,\W,\b,\B |
re.X | 该标志通过给与你更加灵活的格斯以便于将正则表达式写的更易于理解 |
re模块
re.search(pattern,string,flags=0)
:在一个字符串中查找匹配
re.findall(pattern,string,flags=0)
:找到所有匹配,并返回匹配好的列表
re.sub(pattern,repl,string,count=0,flags=0)
:将字符串中匹配正则表达式的部分替换为其他值
re.split(pattern,string,maxsplit=0,flags=0)
:根据匹配分割字符串,返回分割字符串的列表
几个实例:
处理电话号码
# -*- coding: UTF-8 -*-
import re
phone = "2004-959-559 # 这是一个国外电话号码"
# 去掉字符串中的非数字字符,去掉'#'开头的字符串
num = re.sub(r'\D|#.*$', "", phone)
print num
# 输出
# '2004959559'
匹配时间:
t = '19:16:30'
mt = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$', t)
print mt.groups()
匹配IP:
ip = '255.105.25.55'
ipm = re.match(r'^([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$',ip)
print ipm.group()
# 255.105.25.55
print ipm.groups()
# ('255', '105', '25', '55')
匹配邮箱:
>>> st = re.match(r'^(\d{6,10})\@([a-zA-Z]{1,6})\.([a-zA-Z]{2,3})$','123456789@google.xyz')
>>> st.groups()
('123456789', 'google', 'xyz')
查找html标签
tag = '<a href="http://www.immoc.com">IMMOC</a>'
tagm= re.findall(r'<a .*?>(.*)<\/a>',tag)
tagm
# ['IMMOC']
tagm= re.findall(r'<a (.*?)>(.*)</a>',tag)
tagm
# [('href="http://www.immoc.com"', 'IMMOC')]
# 区别在于,匹配的时候匹配'(.*)'的内容,也就是说匹配括号里面的正则
tagm= re.findall(r'(<a .*?>.*</a>)',tag)
tagm
# ['<a href="http://www.immoc.com">IMMOC</a>']
# 匹配<>标签内容
tagm= re.findall(r'<[^>]+>',tag)
tagm
# ['<a href="http://www.immoc.com">', '</a>']
# 获取href的http://..内容
tagm= re.findall(r'\"(http.+?)\"',tag)
>>> tagm
['http://www.immoc.com']