正则表达式
1、字符匹配
1.1 普通字符
大多数字母和字符一般都会和自身匹配
如正则表达式 test会和字符串 "test"完全匹配
1.2 元字符
. ^ $ * + ? {} [ ] | ()
1) [ ]
--常用来表达一个字符集
--元字符在字符集中不起作用
-- 补集匹配不在区间范围内的字符
Exp: s =' t[io]p' t = 'top tip tep trp' re.findall(s,t)
Exp: r =r 'x[0-9]x' re.findall(r,'x3x')
2) ^ -- 匹配行首
。 除非设置multiline标志,它只是匹配字符串的开始。在MULTILINE模式里,它也可以直接匹配字符串中的每个换行。
r = '^hello' s = 'hello the world' re.findall(r,s) result : ['hello']
3)$ -- 匹配行尾
行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。
4) -- 反斜杠后面可以加不同的字符以表示不同特殊意义
5) * --指定前一个字符可以被匹配零次或更多次,而不是只有一次。匹配引擎会试着重复尽可能多的次数。(不超过整数界定范围,20亿次)
- a[bcd]*b -- "abcbd"
6) + -- 表示匹配一或更多次。
--注意* 和 + 之间的不同; * 匹配零或更多次,所以可以根本就不出现,而+则要求至少出现一次。
r = r"ab+"
re.findall(r,'abbb')
['abbb']
7) ? --匹配一次或零次;你可以认为它用于标识某事物是可选的
r = r"^010-?d{8}$"
re.findall(r,'01012345678')
result:['01012345678']
8){m,n}
-- 其中m和n是十进制整数。 该限定符的意思是至少有m个重复,至多到n个重复。
-- 忽略m会认为下边界是0,而忽略n的结果将是上边界为无穷大(实际上是20亿)
-- {0,}等同于 *,(1,)等同于+,而{0,1}则与?相同。 如果可以的话,最好使用 * , + ,或 ?表示。