5.22 Day18

一.匹配单个字符
1.正则表达式 匹配单个字符
import re
lst = re.findall(正则表达式,要匹配的字符串)
返回列表,按照正则表达式匹配到的内容都扔到列表里

1.\d 匹配数字
lst = re.findall("\d","asdlfkjasdklfjkla_()()*(*(23423sdf4")
print(lst)

2.\D 匹配非数字
lst = re.findall("\D","asdlfkjasdklfjkla_()()*(*(23423sdf4")
print(lst)

3.\w 匹配字母或数字或下划线 (正则函数中,支持中文的匹配)
lst = re.findall("\w","sdf&&&s9%%89!!!_你好")
print(lst)

4.\W 匹配非字母或数字或下划线
lst = re.findall("\W","sdf&&&s9%%89!!!_你好")
print(lst)

5.\s 匹配任意的空白符 \n \t \r ' '
lst = re.findall("\s"," ")
print(lst)

6.\S 匹配任意非空白符
lst = re.findall("\S" , " aa bb")
print(lst)

7.\n 匹配一个换行符
lst = re.findall(r"\n",strvar)
print(lst)

二 .字符组 必须匹配中括号里列举的字符[]
1.-是一个特殊的字符,代表的是一个范围 0-9 012345678

2. [a-g] 如果想要表达所有的26个小写字母[a-z]
[A-G] 如果想要表达所有的26个大写字母[A-Z]

3.^ 在字符组当中, 代表除了 放到字符组的左边第一个位置

4. 如果想要匹配^ 或者 -, 在原来的字符前面加上\,让字符的含义失效.

5.匹配 \


三.多个字符匹配
1.正则表达式 多个字符的匹配
1. ?匹配0个或1个
2. + 匹配1个或者多个
3. * 匹配0个或多个
4. {m, n} 匹配m个至n个


2.贪婪模式 与 非贪婪模式
贪婪模式 : 默认向更多次匹配,底层用的是回溯算法
非贪婪模式: 默认向更少次匹配,用一个?号来进行修饰(修饰在量词的身后)
回溯算法: 从左向右进行匹配,一直到最后,直接最后再也匹配不到了,回头,寻找最后一个. 匹配任意字符,除了换行符\n

3.边界符 \b ^ $
1.\b backspace 本身就是一个转义字符
边界符 卡单词 word
卡住左边界 \bw
卡住右边界 d\b
^ 必须以..开头
$ 必须以..结尾

四.匹配分组
正则表达式
1.() 显示括号里面匹配到的内容
2.?: 不显示括号里面的内容
3.| 代表或 , a|b 匹配字符a 或者 匹配字符b
注意事项:为了避免优先匹配前面的字符串,导致字符串匹配不完整,
把较难匹配到的字符串写在前面,容易匹配到的字符串放在后面

2.search 函数
1.findall 把所有匹配到的字符串都搜出来,返回列表.不能把分组内容和匹配的内容同时显示出来

2.search 只要搜索到一个结果就返回,返回对象.可以把分组内容和匹配的内容同时显示出来

3.group : 对象.group() 直接获取匹配到的内容

4.groups: 对象.groups() 直接获取分组里面的内容

注意事项:search 在匹配不到时,返回的是None,无法使用group

五.命名分组
1.当不清楚字符串中含有什么内容时,用.*?进行取代

2.(1) 反向引用

3.\1 代表反向引用,将第一个括号匹配的字符串,在\1位置处在引用一次

4. (?P<组名>正则表达式) 给这个组起一个名字

5. (?P=组名) 引用之前组的名字,把该组名匹配到的内容放到当前位置

 

猜你喜欢

转载自www.cnblogs.com/cloudlzh/p/12952169.html