正则表达式(Regular Expression)
- 一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
- 使用单个字符串来描述、匹配一系列 某个句法规则的字符串。
- 繁琐但强大,学会后可提高工作效率和成就感
它的祖先是 人类神经系统如何工作 的早期研究
什么是字符串呢?
字符:字母,数字,符号,字 1、2、3、A、B、C、~!·#¥%……—*()——+等等
字符串:有限字符的序列 序列:被排成一列的对象
字符串:有限字母,数字,符号,字等等的被排成一列的对象
^ 匹配输入字符串开始的位置(或取反)
$ 匹配输入字符串结束的位置
[0-9] 匹配单个数字
至少一个数字然后abc
- + 一次或多次 +最大方,老客气了,最少要一次 一定要给
- * 零次或多次 *最自由 有或没有都可以 我都可以,你随便啊
- ? 零次或一次 特别抠门的? 1个,不能再多了
- {n} 匹配确定的次数
- {n,m} 最少n次最多m次
. 匹配任意字符,除了换行符
d 匹配一个数字字符。
独立单词 边界的意思/i 大小写不敏感
只允许字母和空格:/^[a-zA-Z ]*$/
邮箱格式:/([w-]+@[w-]+.[w-]+)/ w@w.w
w 指数字英文加下划线
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 要一样一样的哈
print(re.match('www', 'www.runoob.com').span())
#(0, 3) 元组
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
编译:利用编译程序从源语言编写的源程序产生目标程序的过程 (源程序->目标程序)
格式: re.compile(pattern[, flags])
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: 是.哦!
- re.I 忽略大小写
- re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境
- re.M 多行模式
- re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
- re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和 # 后面的注释
findall
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
findall(string,pos,endpos) #后2个位可选参数,为起始和结束 默认为0和默认字符串长度
pattern = re.compile(r'd+') pattern.findall('run88 oob123 google456', 0, 10) #['88', '12']
a = 'China_net809Chinna2018Nanjing' #要匹配的字符串 b = re.findall(r'd{4}Nanjing', a) #字符串在后 print(b) #['2018Nanjing']
a=re.compile(r'd{4}') #要匹配的格式 b=a.findall('China_net809Chinna2018Nanjing') #格式在前 格式都在前 print(b) #['2018Nanjing']
Python中的原生字符串"r"
Python中字符串前面加上 r 表示原生字符串
假如你需要匹配文本中的字符””,那么使用编程语言表示的正则表达式里将需要4个反斜杠””:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
python中""和'的区别
如果是要表示字符串,那么没什么区别。但是,but 想要有'就要"
print("Let's go") print('你说"加油陌生人"')
re_path和path
功能一样,但前者在写url可用正则表达式,所以更牛逼
在正则表达式中定义变量,需要使用圆括号括起来。这个参数是有名字的,那么需要使用(?P<参数的名字>)
。然后在后面添加正则表达式的规则。
命名Python正则表达式组的语法
(?P<name>pattern),其中name是组的名称
r"^list/(?P<year>d{4})/$" #形如 list/5555/