正则
表达式(或RE)是一种小型的、高度专业化的编程语言,它内嵌在python中,并通过re模块实现。
正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行
正则表达式语言相对小型和受限
字符匹配
--普通字符
大多数字母和字符一般都会和自身匹配
如正则表达式test会和字符串“test”完全匹配
--元字符
. ^ $ * + ? {} \ | ()
--常用来指定一个字符集:[abc],[a-z]
--元字符在字符集中不起作用:[akm$]
--补集匹配不在区间范围内的字符:[^5]
^
--匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始。在MULTILINE模式里,它也可以直接匹配字符串中的每个换行。
$
--匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何设置
such as:
>>>import re
>>>a = 'fuck flck fick fock fack ftck'
>>>b = re'f'
>>>re.findall(b,a)
正则表达式--元字符
\
-反斜杠后面可以加不通的字符表示不通特殊意义
-也可以用于取消所有的元字符:\[或\\
\d匹配任何十进制数:相当于类[0-9]
\D匹配任何非数字字符:相当于类[^0-9]
\s匹配任何空白字符:他相当于类[\t\n\f\r\v]
\S匹配任何非空白字符:他相当于类[^\t\n\r\f\v]
\w匹配任何字母数字字符:它相当于类[a-zA-Z0-9]
\W匹配任何非字母数字字符:它相当于类[^a-zA-Z0-9]
重复举例:
>>>010-012345678
-12345670
>>>c = r'010-\d{8}'
>>>re.findall(c,'010-12345678')
*:表示将前面的字符重复0-多次
>>>r = r'ab*'
>>>re.findall(r,'abbbbbbbbbbbbb')
['abbbbbbbbbbbbb']
+:重复至少要重复1次
?:重复0次或者1次 表示前面那个字符可有可无
+返回的是最大匹配
>>>a = r'ab+'
>>>re.findall{r.'abbbbbbbb'}
abbbbbbbb
?返回的是最小匹配非贪婪模式
ab
{m,n}:
-其中m和n是十进制整数。该限定符的意思是至少有m个重复,至多到n个重复。a\{1,3}b
-忽略m会认为下边界是0,而忽略n的结果将是上边界为无穷大(实际是20亿)
-{0,}等同于*,{1,}等同于+,而{0,1}则与?相同。但是最爱好还是用*+?
import re
编译正则表达式
>>>a = r'\d{3,4}-?\d{8}'
>>>a_tel = re.compile(a)
>>>a_tel.findall('010-12345678')
给表达式a编译成a_tel
>>>csvt_re = re.compile(r'csvt',re.I) re.I不区分大小写
>>>csvt_re.findall('CSVT')
'CSVT'
常用的编译后的
match() 决定RE是否在字符串刚开始的位置匹配
search() 扫描字符串 ,找到这个re的匹配位置
findall() 找到re匹配的所有子串,并把它们作为一个列表返回
finditer() 找到re匹配的所有子串,并把它们作为一个迭代器返回
--Matchobject实例方法
group() 返回被RE匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配(开始,结束)的位置
subn() 将字符串某个内容替换成规则内容
>>>r =r'c..t'
>>>re.subn(r.'python','csvt,ccct,cxxt,cbbt,cccc')
split() 根据某个符号对字符串进行切割
,S匹配包括换行在内的所有字符
,I匹配对大小写不敏感
,L做本地化识别(locale-aware)匹配。语法等“e”或“c”
,M多行匹配影响^和$
,X能够使用RES的verbose状态,使之组织的更清晰易懂