python正则表达式示例(五)
竖线-匹配两者之一
竖线表示 匹配 前者 或 后者 。
特别要注意的是, 竖线在正则表达式的优先级是最低的, 这就意味着,竖线隔开的部分是一个整体
比如 绿色|橙
表示 要匹配是 绿色
或者 橙
,
而不是 绿色
或者 绿橙
从下面的文本里面抓取 所有职位的薪资
Python3 高级开发工程师 上海互教教育科技有限公司上海-浦东新区2万/月02-18满员 测试开发工程师(C++/python) 上海墨鹍数码科技有限公司上海-浦东新区2.5万/每月02-18未满员 Python3 开发工程师 上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人 测试开发工程师(Python) 赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月02-18剩余5人
我们使用的表达式是 ([\d.]+)万/每{0,1}月
为什么这么写呢?
[\d.]+
表示 匹配 数字或者点的多次出现 这就可以匹配像: 3 33 33.33 这样的 数字
万/每{0,1}月
是后面紧接着的,如果没有这个,就会匹配到别的数字, 比如 Python3 里面的3。
其中 每{0,1}月
这部分表示匹配 每月
每 这个字可以出现 0次或者1次。
聪明的你能想到,还可以用什么来表示这个 每{0,1}月
吗?
对啦,还可以用 每?月
因为问号表示 前面的字符匹配0次或者1次
使用正则表达式切割字符串
字符串 对象的 split() 方法只适应于非常简单的字符串分割情形。当你需要更加灵活的切割字符串的时候,就不好用了。
比如,我们需要从下面字符串中提取武将的名字。
我们发现这些名字之间, 有的是分号隔开 ,有的是逗号隔开,有的是空格隔开, 而且分割符号周围还有不定数量的空格
names = '关羽; 张飞, 赵云,马超, 黄忠 诸葛亮'
这时,最好使用正则表达式里面的 split 方法:
import re names = '关羽; 张飞, 赵云, 马超, 黄忠 诸葛亮' namelist = re.split(r'[;,\s]\s*', names) print(namelist)
正则表达式 [;,\s]\s*
指定了,分割符为 分号、逗号、空格 里面的任意一种均可,并且 该符号周围可以有不定数量的空格。