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* 指定了,分割符为 分号、逗号、空格 里面的任意一种均可,并且 该符号周围可以有不定数量的空格。

posted @ 2020-04-08 23:07  飞鸟与新月  阅读(475)  评论(0编辑  收藏  举报