#正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据,任何编程语言都可以使用 #在python中如果想用就必须借助于内置模块re。
http://tool.chinaz.com/regex/
'''单个字符组默认一次只匹配一个字符''' 1.[0123456789] 匹配0到9之间的任意一个数字 2.[0-9] 匹配0到9之间的任意一个数字(简写) 3.[a-z] 匹配a到z之间的任意一个小写字母 4.[A-Z] 匹配A到Z之间的任意一个大写字母 5.[0-9a-zA-Z] 匹配任意一个数字或者大小写字母(没有顺序)
. 匹配除换行符(\n)以外的任意字符 \w 匹配数字、字母、下划线(后续筛选变量名可能用到) \d 匹配任意的数字 \t 匹配一个制表符(tab键) ^ 匹配字符串的开始 eg:^9 找9并且这个9必须在开头 $ 匹配字符串的结尾 eg:9$ 找9并且这个9必须在末尾 \W 匹配非字母或数字或下划线 \D 匹配非数字 a|b 匹配a或者b 管道符就是or(或)的意思 () 给正则表达式分组 不影响正则匹配(后续再讲) [] 字符组的概念(里面所有的数据都是或的关系) [^] 上箭号出现在了中括号的里面意思是取反操作
量词必须跟在表达式的后面 不能单独使用 目的是增加匹配的字符数
字符 | 功能 |
---|---|
* | 匹配前⼀个字符出现0次或者⽆限次,即可有可⽆ |
+ | 匹配前⼀个字符出现1次或者⽆限次,即⾄少有1次 |
? | 匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有 |
{m} | 匹配前⼀个字符出现m次 |
{m,n} | 匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次 |
#Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。 举个例子: 当要去在”abbbc”中筛选出‘ab’,利用正则表达式”ab*”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”ab”。 所以一般情况下使用非贪婪模式来提取。(在"*","?","+","{m,n}"后⾯加上?,使贪婪变成⾮贪婪。)
#re.match函数 re.match(正则表达式,待匹配的文本) #使用说明 1.从字符串的起始位置匹配,如果不是起始位置匹配成功的话,match()就返回None。匹配成功re.match方法返回一个匹配的对象。 2.匹配到数据的话,可以使⽤group⽅法来提取数据。以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。 3.group()用来提出分组截获的字符串,()用来分组,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。没有匹配成功的,re.search()返回None。 #re.search函数 re.search(正则表达式,待匹配的文本) #使用说明 re.search 扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。 re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配 #re.findall函数 re.findall(正则表达式,待匹配的文本) #使用说明 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。 #re.finditer函数 re.finditer(正则表达式,待匹配的文本) #使用说明 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。