正则表达式可以做什么
1.定规则后,判断什么样的字符串满足这个规则--匹配
2.从很多字符串中找到部分想要的字符串--查询
3.替换部分字符串--替换
正则表达式的特点是:
- 灵活性、逻辑性和功能性非常强;
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 对于刚接触的人来说,比较晦涩难懂。
第一、表示某个字符的
.
表示任意字符,除开\n- \d:表示数字等价[0-9]
- \D:表示非数字[^0-9]
- \s:表示空白字符,不能显示的字符\n \t \r 和空格
- \S:非空白字符
- \w:表示单词字符a-z A-Z 0-9 _
- \W:非单词字符,例如 *#$
[]:匹配中括号里面的任意一个字符
第二部分表示数量
- *:匹配前一个字符出现0次或者无限次,既可有可无。
- +:匹配前一个字符出现至少1次或者无限次,即至少1次。
- ?:匹配前一个字符出现0次或者1次,即要1次,要么没有。
- {m}:匹配前一个字符出现m次
- {m,}:匹配前一个字符至少出现m次
- {m,n}:匹配前一个字符出现m-n次之间,包括m和n次
第三部分:让\r \n \t等转义的地方原始的输出
- 例如输出:s = "\nabc"
re.match("\\\\abc",s)
- 等价于
re.match(r"\\abc",s)
即可
从这个以后,为了方便,以后所有的都要加上
re.match(r"\\abc",s)
第四部分表示边界
- $:匹配字符串结尾
- ^:匹配字符串开头
- \b:匹配单词的边界 I love you
- \B:匹配非单词的边界
第五部分匹配分组
|
:匹配左右任意一个表达式(ab)
:将括号中字符串作为一个分组\num
:引用分组num匹配到的字符串(?P<name>)
分组起别名(?P=name)
:引用别名为name分组匹配到的字符串
第五部分高级模块
re.match
("正则表达式","字符串"):从左边第一个字符开始匹配,
如果前面有匹配不成功的,就算后面有可以匹配的,也是匹配失败
re.search
("正则表达式","字符串"):从左边开始匹配,如果没有成功,会一直往下匹配,直 到匹配成功为止,除非整个字符都没有匹配成功的部分。如果匹配的时候有多处可以成功,会匹配从左到右边的一出。re.findall
("规则","字符串"),查找字符串所有匹配成功的re.sub
("规则","要替换成的字符串","字符串")将匹配到的数据进程替换re.split
("规则","字符串")根据匹配进行切割字符串
第六部分python贪婪和非贪婪
- Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符;
非贪婪则相反,总是尝试匹配尽可能少的字符。
在*
,?
,+
,{m,n}
后面加上?
,使贪婪变成非贪婪。