1、字符
元字符 | 匹配内容 |
. | 匹配除换行符以外的任意字符 |
\w | 匹配字母或数字或下划线 |
\s | 匹配任意的空白符 |
\d | 匹配数字 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
\b | 匹配一个单词的结尾 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
\w | 匹配非数字或数字或下划线 |
\D | 匹配非数字 |
\S | 匹配非空白符 |
a|b | 匹配字符a或字符b |
() | 匹配括号内的表达式,也表示一个组 |
[....] | 匹配字符组中的字符 |
[^...] | 匹配除了字符组中字符的所有字符 |
2、量词
1.量词只能够影响前面一个字符(ab+ 影响b)
2.量词不能够单独使用,必须配合表达式使用
量词 用法说明 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 { n } 重复n次 { n, } 重复n次或更多次 { n,m } 重复n到m次
3、贪婪匹配
'''贪婪匹配就是把匹配的内容尽量多的匹配!'''
取消贪婪匹配
< .*? >
. 是任意字符
* 是取0至无限长度
?是非贪婪模式
三者合在一起就是 取尽量少的任意字符,一般不会这么单独写,它大多用在:.*?x(意思是取前面任意长度的字符,直到下一个x出现)
4.取消转义
'\n'------>\\n
'\\n'------>\\\\n
在原生正则中,取消转义符只需加\(一个\只能转一个字符)
在python中,推荐使用r ' \n\t\d' # 取消转义
D:\\day20\\a\\b\\c
5.re模块下的常用方法
在python中,如果使用正则,需要借助于模块,re模块
re----------->regluar express
import re
# ret = re.findall(' 正则 ',' 待匹配内容 ') # 返回所有满足匹配条件的结果,放在列表里
''' 带匹配内容一定是一个字符串,文本 . [] '''
# ret = re.findall('ab','eva egon yuan a') # 返回所有满足匹配条件的结果,放在列表里
''' 如果匹配到内容就把数据以列表的形式返回,如果匹配不到就返回[] '''
# print(ret) # ['a','a']
# if ret:
# pass
# else:
# pass
ret=re.search('ab','eva egon yuan')
print(ret) # 结果为:‘a’
# print(ret.group()) # a
# 函数会在字符串内查找模式匹配,只找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None
# if ret:
# print(ret.group())
# else:
# print(ret)
# try:
# ret=re.search('a','eva egon yuan').group()
# print(ret)
# except Exception:
# print(ret)
ret = re.match('a','ewqeqwabc') # 同search,不过尽在字符串开始出进行匹配
print(ret)
try:
ret = re.match('a','ewqeqwabc').group()
print(ret)
except Exception:
print(ret)
6.分组
1.无名分组:使用小括号括起来的正则表达式就是无名分组
''' 常用 '''
res = re.search('^[1-9](\d{14})(\d{2}[0-9x])?$' ,'120105199812067023')
print(res)
print(res.group())
print(res.group(1))
print(res.group(2))
# findall针对分组优先展示 无名分组
'''
如果是findall,分组优先展示,无名分组
'''
res = re.findall('^[1-9](\d{14})(\d{2}[0-9x])?$' ,'120105199812067023')
print(res)
2.有名分组:使用小括号括起来的正则表达式然后给起个名字就是有名的
res = re.search('^[1-9](?P<xxx>\d{14})(?P<ooo>\d{2}[0-9x])?$','110105199812067023')
print(res)
print(res.group(1))
print(res.group(2))
print(res.group('xxx'))
print(res.group('ooo'))