正则表达式
正则表达式
1.介绍符号表达的含义
符号 | 代表含义 |
---|---|
\d | 一个数字 |
\w | 一个字母或数字 |
. | 任意字符 |
‘py.’ | 可以匹配’pyc’, ‘pyo’, ‘py!’ |
* | 任意个字符(含0) |
+ | 至少一个字符 |
? | 0/1个字符 |
{n} | n个字符 |
{n,m} | n-m个字符 |
\s | 一个空格(tab等空白符) |
[0-9a-zA-Z_] | 可以匹配一个数字、字母或者下划线 |
[0-9a-zA-Z_]+ | 可以匹配至少由一个数字、字母或者下划线组成的字符串 |
[0-9a-zA-Z\_]
可以匹配一个数字、字母或者下划线[0-9a-zA-Z\_]+
可以匹配至少由一个数字、字母或者下划线组成的字符串A|B
可以匹配A或B(P|p)ython
可以匹配’Python’或者’python’^
表示行的开头$
表示行的结尾
2. re 模块
1.字符串匹配
import re
re.match(r"^\d{3}\-\d{3,8}$", "010-12345") #match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None
#<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
#>>>
2.切分字符串
re.split(r"\s+", "a b c") #['a', 'b', 'c']
re.split(r"[\s\,]+", "a,b, c d") #['a', 'b', 'c', 'd']
re.split(r"[\s\,\;]+", "a,b;; c d") #['a', 'b', 'c', 'd']
3.分组
用()表示的就是要提取的分组 Group
import re
m = re.match(r"^(\d{3})-(\d{3,8})$", "010-12345")
#<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
m.group(0) #'010-12345', 原始字符串
m.group(1) #'010'
m.group(2) #'12345'
m.groups() #('010', '12345')
如果正则表达式中定义了组,就可以在Match对象上用
group()
方法提取出子串来。
4.编译
import re
#编译
re_telephone = re.compile(r"^(\d{3})-(\d{3,8})$")
#使用
re_telephone.match("010-12345").groups() #('010', '12345')
re_telephone.match("010-8086").groups() #('010', '8086')
如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式,接下来重复使用时就不需要编译这个步骤了,直接匹配