今日学习目标:
- 学习运用正则表达式
- 熟知python内置模块之re模块
今日学习内容:
内容简要:
- 正则表达式
- python内置模块之re模块
内容详细:
正则表达式
-
正则表达式简介
引言
当你遇到一些字符数据,要对其进行筛查和校验时大概对于刚入行的小白来说就是利用if…else…相互嵌套去逐步对数据进行相应的处理。这样的话就会在老程序员眼里显得过程太臃肿了,此时他就会告诉你去看看正则表达式在来写吧概念
正则表达式是一门独立的语言 专门用来匹配、校验、筛查所需的数据,任何编程语言都可以使用
同理在python中如果想用就必须借助于内置模块re
,对于正则表达式的学习听着好像会很难,看一下概念就明白了。它的学习其实就是在学习它独有的语言
,就像学习python一样但相比较下还是会简单些的。
这边推荐一个在线测试网站:http://tool.chinaz.com/regex/ -
正则表达式特殊符号
- 匹配单个字符
字符 功能 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 \d 匹配数字,即0-9 \D 匹配⾮数字,即不是数字 \s 匹配空⽩,即空格,tab键 \S 匹配⾮空⽩字符 \w 匹配单词字符,即a-z、A-Z、0-9、_ \W 匹配⾮单词字符 - 特殊符号
字符 功能 ^ 匹配字符串开头 $ 匹配字符串结尾 () 将括号中字符作为⼀个分组 举例
.
的用法
[]
的用法
\d、\D
的用法
\s、\S
的用法
\w、\W
的用法
^
的用法
$
的用法
()
的用法
-
正则表达式量词
- 匹配多个字符
字符 功能 * 匹配前⼀个字符出现0次或者⽆限次,即可有可⽆ + 匹配前⼀个字符出现1次或者⽆限次,即⾄少有1次 ? 匹配前⼀个字符出现1次或者0次,即要么有1次,要么没有 {m} 匹配前⼀个字符出现m次 {m,n} 匹配前⼀个字符出现从m到n次,若省略m,则匹配0到n次,若省略n,则匹配m到无限次 举例
*
的用法
+
的用法
?
的用法
{m}
的用法
{m,n}
的用法
-
正则表达式贪婪与非贪婪匹配
Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。
举个例子:
当要去在”abbbc”中筛选出‘ab’,利用正则表达式”ab*”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”ab”。
所以一般情况下使用非贪婪模式来提取。(在"*","?","+","{m,n}"后⾯加上?,使贪婪变成⾮贪婪。)
-
正则表达式取消转义
问题引入
正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。处理方式
假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,Python中字符串前⾯加上 r 表示原⽣字符串。
python内置模块之re模块
-
引言
- 在python中无法直接使用正则 需要借助于模块(1.内置的re模块2.第三方的其他模块)
- 有一些模块内置函数在调用时需要连续编写正则表达式,这样的话就可以提前写好后续需要经常使用的正则
变量名 = re.compile(正则表达式)
re.函数名(变量名,待匹配的文本)
-
模块中使用频率较高的函数
- re.match函数
语法结构
re.match(正则表达式,待匹配的文本)
使用说明
-
从字符串的起始位置匹配,如果不是起始位置匹配成功的话,match()就返回None。匹配成功re.match方法返回一个匹配的对象。
-
匹配到数据的话,可以使⽤group⽅法来提取数据。以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
-
group()用来提出分组截获的字符串,()用来分组,group() 同group(0)就是匹配正则表达式整体结果,group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。没有匹配成功的,re.search()返回None。
举例
import re result = re.match("ab","abcdef") print(result.group()) ''' # 执行结果 ab '''
-
re.search函数
语法结构
re.search(正则表达式,待匹配的文本)
使用说明
-
re.search 扫描整个字符串并返回第一个成功的匹配,如果没有匹配,就返回一个 None。
-
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配
举例
import re ret = re.search(r"\d+", "阅读次数为9999") print(ret.group()) ''' # 执行结果 9999 '''
-
-
re.findall函数
语法结构
re.findall(正则表达式,待匹配的文本)
使用说明
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。注意: match 和 search 是匹配一次 findall 匹配所有。举例
import re ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345") print(ret) ''' # 执行结果 ['9999', '7890', '12345'] '''
-
re.finditer函数
语法结构
re.finditer(正则表达式,待匹配的文本)
使用说明
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。举例
import re it = re.finditer(r"\d+", "12a32bc43jf3") for match in it: print(match.group()) ''' # 执行结果 12 32 43 3 '''
- re.match函数
今日学习时间:
这里统计计划学习的时间
1、 上午8:30~12:30
2、 下午2:30~5:30
3、 晚上6:30~9:30
今日学习产出:
这里统计学习计划的总量
- 1、 技术笔记 1遍
- 2、CSDN 技术博客 1篇
- 3、每日录音,预习明日内容