re 模块 常规方法使用
前情提要:
re模块主要用于正则,用的好了秒杀一切匹配的规则,这里主要是介绍基本用法
一:元字符
1:\w 匹配字符,包含中文,数字或下划线
l ='早乙女露依 123 是我的 321 心目中的 222 女神 666 女神 '
# print(re.findall('\w',l)) # ['早', '乙', '女', '露', '依', '是', '我', '的', '心', '目', '中', '的', '女', '神', '女', '神']
2:\W 匹配非字符,包含中文,数字或下划线
l ='早乙女露依 123 是我的 321 心目中的 222 女神 666 女神 '
# print(re.findall('\W',l)) #[' ', ' ', ' ', ' ', ' ', ' ', ' ']
3:\s 匹配任意的空白符
#\s 匹配任意的空白符
# print(re.findall('\s',l)) #[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
4:\S 匹配任意的空白符
#\S 匹配任意非空白符
# print(re.findall('\S',l)) #['早', '乙', '女', '露', '依', '1', '2', '3', '是', '我', '的', '3', '2', '1', '心', '目', '中', '的', '2', '2', '2', '女', '神', '6', '6', '6', '女', '神']
5:\d 匹配任意的数字
#\d 匹配数字
# print(re.findall('\d',l)) #['1', '2', '3', '3', '2', '1', '2', '2', '2', '6', '6', '6']
6:\D匹配任意的非数字
#\D 匹配非数字
# print(re.findall('\D',l)) #['早', '乙', '女', '露', '依', ' ', ' ', ' ', '是', '我', '的', ' ', ' ', '心', '目', '中', '的', ' ', ' ', '女', '神', ' ', ' ', '女', '神', ' ']
7:\A ^ 匹配任意字符串的开始
# \A ^ 匹配字符串的开始
# print(re.findall('\A早',l)) #['早']
8:\Z $ 匹配任意字符串的结尾
#\Z $ 匹配字符串的结尾
# print(re.findall('神 $',l)) #['神 ']
9: \t \ n 匹配任意空白符
#\n \t 匹配空白符
# print(re.findall('\n',l))
二:重复匹配
1: . 匹配任意字符
#. 匹配任意字符
# print(re.findall('早.女',l)) # ['早乙女']
2: ? 匹配0个或者一个左面的定义规则内容
#? 匹配0个或者1一个由左面字符定义的片段
# l ='abbzab abb aab'
# print(re.findall('a?b',l))
3: * 匹配0 个或者多个左面的定义规则内容
#* 匹配0个或者多个左面字符表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a*b',l)) #['b', 'ab', 'aaaaaab', 'ab', 'b', 'b', 'ab', 'aab', 'b', 'ab', 'b', 'b']
4: + 匹配1 个或者多个左面的定义规则内容
# +匹配1个或者多个左面字符表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a+b',l)) #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']
5: {n,m} 匹配n 至m 个左面的定义规则内容
#{n,m} 匹配n至m个左面字符的表达式
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a{4,5}b',l)) #['aaaaab']
6: .* 贪婪匹配 从头匹配到尾巴
# .* 贪婪匹配 从头匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*b',l)) # ['ab aaaaaab abbbabaabbabbb']
7: .*? 非贪婪匹配 从头匹配到尾巴
#.*?非贪婪匹配 ,从头匹配到尾巴
# l ='b ab aaaaaab abbbabaabbabbba'
# print(re.findall('a.*?b',l)) #['ab', 'aaaaaab', 'ab', 'ab', 'aab', 'ab']
8:[ ] 加入参数 匹配
[] 加入参数
# print(re.findall('a[abc]b','aab abb acb aaacb')) #['aab', 'abb', 'acb', 'acb']
9:[0-9] 加入数字 匹配
#[0-9]
# print(re.findall('a[0-9]b','a2b a3b a0b aaf aab')) #['a2b', 'a3b', 'a0b']
10:[a-z] 加入小写字母匹配
#[a-z]
# print(re.findall('a[a-z]b','abb bcb acb afb asssddb')) #['abb', 'acb', 'afb']
11:[A-Z] 加入大写字母匹配
#[A-Z]
# print(re.findall('a[A-Z]b','aAb aCb Abb ABB')) #['aAb', 'aCb']
12:[a-zA-Z] 注意不能倒过来, 需要小的在前面
# print(re.findall('a[a-zA-Z]b','aAb aCb Abb ABB')) #['aAb', 'aCb']
13: () 定制一个规则, 将满足的规则匹配出来
# print(re.findall('(.*?)_b','wo_b chi_b hhe_b fas adadas_bd')) #['wo', ' chi', ' hhe', ' fas adadas']
三: 常用方法总结
1:search 找到第一个规则,找不到则返回None
对象.group() 调用
# print(re.search('alex','re alex alex 太白').group()) #alex
# print(re.search('alex','re aaleex aaleex 太白')) #None
2:match 匹配开头文字,如果匹配不到就None
# print(re.match('alex','alex alex 太白').group()) #alex
# print(re.match('alex','re alex alex 太白')) #None
3:spilt 切割
# s1 = 'wusir;太白,alex|日天!小虎'
# print(re.split(';,|!',s1)) #['wusir;太白,alex|日天', '小虎']
4:compile() 制定一个规则
# re.I(re.IGNORECASE)
# 使匹配对大小写不敏感
#
# re.L(re.LOCAL)
# 做本地化识别(locale-aware)匹配
#
# re.M(re.MULTILINE)
# 多行匹配,影响 ^ 和 $
#
# re.S(re.DOTALL)
# 使 . 匹配包括换行在内的所有字符
#
# re.U(re.UNICODE)
# 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
#
# re.X(re.VERBOSE)
# 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
re 模块 常规方法使用的更多相关文章
- Maven提高篇系列之(一)——多模块 vs 继承
这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) ...
- ABP新增模块可能遇到的问题
当我们新增一个模块时: public class SSORedisModule: AbpModule { //public override void PreInitialize() //{ // b ...
- 爬虫与request模块
一.爬虫简介 1.介绍 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁. ...
- python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...
- python2.0_day18_Django自带的用户认证模块的使用
用户验证我们基于一个项目来学习利用Django框架中的user表实现用户认证Django练习小项目:学员管理系统设计开发 项目需求: 1.分讲师\学员\课程顾问角色, 2.学员可以属于多个班级,学员成 ...
- JS框架设计之加载器所在路径的探知一模块加载系统
1.要加载一个模块,我们需要一个URL作为加载地址,一个script作为加载媒介,但用户在require是都用ID,我们需要一个将ID转换为URL的方法,思路很简单,强加个约定,URL的合成规则是为: ...
- Maven 梳理 -多模块 vs 继承
Maven提高篇系列之(一)——多模块 vs 继承 这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plu ...
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
随机推荐
- 对象转换利器之Dozer
什么是Dozer Dozer是一个Java对象转换工具,可以在JavaBean和JavaBean之间进行递归数据复制,并且适应不同复杂的类型.Dozer会直接将名称相同的属性进行复制,属性名不同或者有 ...
- c++ stringstream的使用
stringstream ss;//一次创建多次使用,需要进行clear()操作清除流状态标记 int i=0; while (i<3) { ss<<"21"; ...
- oracle 查询死锁
--查询死锁 select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked ...
- centos下修改文件后如何保存退出
centos下修改文件后如何保存退出 保存命令 按ESC键 跳到命令模式,然后: :w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :w ...
- C#使用Log4Net记录日志(转)
出处:http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html 第一步:下载Log4Net 下载地址:http://logg ...
- linux 查找php.ini在那个文件夹
第一种方法:通过phpinfo查看 第二种方法: 执行 php -i | grep php.ini 结果如下:
- WPF 绑定备忘单
Part I – Common Examples Basic Binding {Binding} Bind to current DataContext. {Binding Name} Bi ...
- PYTHON 和R的对比
为了鼓励新工具的出现,机器学习和数据分析领域似乎已经成了“开源”的天下.Python 和 R 语言都具有健全的生态系统,其中包括了很多开源工具和资源库,从而能够帮助任何水平层级的数据科学家展示其分析工 ...
- Zabbix部署与使用
*******需要配置网易YUM源来安装相关依赖包: [local_yum] name=local_yum baseurl=http://mirrors.163.com/centos/6/os/x86 ...
- delphi中,write和read的用法?什么时候需要用?
如你所说,在控件或者类的属性中,read 表示 读取,write 则表示设置.比如在类中:TTestClass = (Class)privateFOrderCode:String;publicprop ...