1.单个字符匹配
1.1预定义字符集
\d 匹配数字

import re
lst=re.findall('\d','45d5a65s')

\D 匹配非数字

import re
lst=re.findall('\D','asv#$!231')

\w 匹配字母或数字或下划线

import re
lst=re.findall('\w','avsgs__263726#@$#')

\W 匹配非字母,非下划线,非数字

import re
lst=re.findall('\D','xvasgsa#$#@$23')

\s 匹配任意空白符(\n \t \r ’ ')

import re
lst=re.findall('\s','\t	\n')

\S 匹配任意非空白符

import re
lst=re.findall('\S','\t  dsa    ds')

\n 匹配换行符\n

import re
lst=re.findall('\n',"""

""")

1.2 字符组
定义:必须匹配任意中括号列举的字符,如:[abc]或a[abc]b或a[01234]b

在字符组中’-'是一个特殊字符,代表一定范围:
如:[0-9]或[a-z]或[A-Z]或[0-9a-zA-Z]…

^除了:在字符组中为"除了"的功能,放在字符组左边的第一个位置

import re
lst=re.findall('[^abc]','agdsjhvbn') 
# 匹配除了a,b,c外的所有字符

匹配’^‘与’-’:可以在字符前加上’'号使其转义失效进行匹配

import re
lst=re.findall('[\^\-]','_^-dsa2221')

匹配’’:字符前加上’'号使其转义失效进行匹配

import re
lst=re.findall(r'\\',r'\\\\\dasd')
# lst=['\\', '\\', '\\', '\\', '\\']

匹配’\b’:字符前加上’'号使其转义失效进行匹配

import re
lst = re.findall(r'a[\^\\]b', r'a^b a\b')
# lst=['a^b', 'a\\b']
  1. | 或
    定义:|在正则表达式中代表或
    注意:为了避免优先匹配前面字符串导致字符串匹配不完整把较难匹配到的字符串写在前面
strvar = 'abc5732642348abcd21326'
lst = re.findall('abc|abcd', strvar)
print(lst)  # ['abc', 'abc']
lst = re.findall('abcd|abc', strvar)
print(lst)  # ['abc', 'abcd']

4.匹配分组
显示括号里的内容

strvar='wuli_boy hhhh_boy lll男人_boy'
print(re.findall(r'(.*?)_boy',strvar))
# ['wuli', ' hhhh', ' lll男人']

?:不显示括号里的内容
即显示完整匹配到的内容

print(re.findall(r'(?:.*?)_boy',strvar))
# ['wuli_boy', ' hhhh_boy', ' lll男人_boy']

?!检测不到对应正则表达式内容则继续
?=检测到对应正则表达式内容则继续
5.search函数
findall 把所有匹配到的字符串都搜出来,返回列表
不能把分组的内容和匹配到的内容同时显示出来
search 只要搜索到一个结果就返回,返回对象
可以把分组内容和匹配到的内容同时显示出来
group : 对象.group() 直接获取匹配到的内容,返回字符串
groups:对象.groups() 直接获取分组里面的内容,返回元组(注意,元组的元素为分组匹配到的内容)

strvar = 'www.baidu.com'
obj = re.search(r'(www)\.(baidu)\.(com)', strvar)
print(obj) #<_sre.SRE_Match object; span=(0, 13), match='www.baidu.com'>
print(obj.group()) # www.baidu.com
print(obj.groups()) # ('www', 'baidu', 'com')

6.命名分组
反向引用:\x代表反向引用,将第x个括号匹配到的字符串
在\x位置处再引用一次
注意:当正则表达式有多个括号分组匹配字符串时返回列表里的元素为多个括号分组匹配到的元素组成的元组

strvar = '<div>明天就放假了,很开心</div>'
lst = re.findall(r'<(.*?)>(.*?)<(/\1)>', strvar)
print(lst) # [('div', '明天就放假了,很开心', '/div')]
示例2:
strvar = 'a1b2wwwwwab'
obj = re.search(r'(.*?)\d(.*?)\d(.*?)\1\2', strvar)
print(obj.group(), obj.groups())
# a1b2wwwwwab ('a', 'b', 'wwwww')

分组引用:(?P<组名>正则表达式)给这个小组起一个名字
(?P=组名) 引用之前组的名字,把对应组名匹配到的结果放到当前位置

strvar = 'a1b2cab'
obj = re.search(r'(?P<tag1>.*?)\d(?P<tag2>.*?)\d(?P<tag3>.*?)(?P=tag1)(?P=tag2)', strvar)
print(obj.group())