什么是学习笔记?
你在学习中想写的批注、摘抄及随感。
元字符, 正则表达式 第二节
r = r"^abc" //开头为abc
import re
re.findall(r,'abc') //规则r匹配字符串‘abc’
['abc']
re.findall(r,'^abc')
[]
如何在规则中将元字符作为普通字符
r = r"\^abc" //^作为普通字符
re.findall(r,'^abc ^abc ^abc')
['^abc', '^abc', '^abc']
\ :加不同字符表示不同含义
也可以用于取消所有元字符
r = r"[0-9]"
re.findall(r, "123456789")
['1','2', ...]
r = r"\d" //与前者同
\d 匹配任何十进制数 0-9
\D匹配任何非数字字符 相当于[^0-9]
\w匹配任何字母和数字字符 [a-zA-Z]
\W 匹配任何非字母数字字符 [^a-zA-Z0-9]
重复
正则表达式:匹配不定长的字符集及指定一部分表达式重复次数
匹配电话号码
010-12345678
r = r"^010-\d\d\d\d\d\d\d\d" //8位
re.findall(r,'010-87654321')
正确匹配
多次重复时可以用{}表示
r = r"^010-\d{8}" // \d重复八次
*指定前一个字符可以被匹配零次或者更多次,而不是只有一次。匹配次数不超过整数界定范围 20亿
a[bcd]*b ----可以匹配abcbd
r = r"ab*" //把b重复0次或者多次
re.findall(r, 'a')
['a'] // 匹配0次
+ :匹配至少一次
r = r"ab+"
re.findall(r, 'a')
[] //至少一次
re.findall(r, 'ab')
['ab']
r = r"^010-a{8}$" //中间的 - 是可选的 如何实现
r = r"^010-*\d{8}$"
re.findall(r, '01012345678')
['010...'] // *可以匹配多次
? 表示可有可无 重复一次或者零次
+ 是贪婪匹配
?是最小匹配,值匹配一个
r = r"ab+"
re.findall(r,'abbbb')
['abbbb'] 贪婪
r = r"ab+?"
re.findall(r, 'abbbb')
['ab'] 非贪婪
{m,n} //至少重复m次,最多重复n次
r = r"a{1,3}" a重复1-3次
{0,} ==*
{1,}==+
{0,1}==?
最好使用*+?