Python正则表达式

什么是正则表达式?

正则表达式是一组由字母和符号组成的特殊文本,可以帮助我们从某个复杂的字符串中,提取出满足我们要求的特殊文本。

用一个形象的比喻大致体会一下正则匹配的过程。苹果相当于写的“正则表达式”,字符串相当于“水果市场”,“正则匹配的过程”就相当于拿着苹果去“水果市场”找苹果的过程,每找到一个就返回一个,否则就什么也没有。

为什么要使用正则表达式?

接下来,我们看一个实例,找出所有的薪资数字:

content = '''
Python3高级开发工程师上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python)上海墨鹖数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3高级开发工程师上海互教教育科技有限公司上海-浦东新区2万/月02-18满员测试开发工程师(C++/python)上海墨鹖数码科技有限公司上海-浦东新区2.5万/每月02
-18未满员
Python3开发工程师上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月e2-18剩余5人Python高级开发工程师上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员
'''

#将文本内容按行放入列表
lines = content.splitlines()
for line in lines:
    pos2 = line.find('万/月') #查找 万/月 在字符串中什么地方
    if pos2< 0:
        pos2 = line.find('万/每月') #查找 万/每月 在字符串中什么地方
        if pos2 <0:#都找不到
            continue #跳过执行下一步

#执行到这里,说明可以找到薪资的关键字
#接下来分析 薪资 数字的起始位置
#方法事找到 pos2 前面薪资数字的位置

idx = pos2 -1

#只要事数字或者小数点,就继续往前面找
while line[idx].isdigit() or line[idx]=='.':
    idx -= 1

# 现在 idx 指向 薪资数字前面的那个字
# 所以薪资开始的 索引 就是 idx+1
pos1 = idx + 1

print(line[pos1:pos2])

 运行一下,是完全可以的,就是还挺麻烦的,是不是?接下来我们来看下用上正则表达式后会是怎么样:

content = '''
Python3高级开发工程师上海互教教育科技有限公司上海-浦东新区2万/月02-18满员
测试开发工程师(C++/python)上海墨鹖数码科技有限公司上海-浦东新区2.5万/每月02-18未满员
Python3高级开发工程师上海互教教育科技有限公司上海-浦东新区2万/月02-18满员测试开发工程师(C++/python)上海墨鹖数码科技有限公司上海-浦东新区2.5万/每月02
-18未满员
Python3开发工程师上海德拓信息技术股份有限公司上海-徐汇区1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区1.1万/每月e2-18剩余5人Python高级开发工程师上海行动教育科技股份有限公司上海-闵行区2.8万/月02-18剩余255人
python开发工程师上海优似腾软件开发有限公司上海-浦东新区2.5万/每月02-18满员
'''
import re

p = re.compile(r'([\d.]+)万/每{0,1}月')  #([\d.]+)万/每{0,1}月 正则表达式的语法

for one in p.findall(content):
    print(one)

#结果
2
2.5
2
2.5
1.3
1.1
2.8
2.5

在线验证表达式是否能正确匹配到搜索的字符串:https://regex101.com/

 

上一篇:C++ 多线程系统编程精要


下一篇:Linux命令行与shell脚本编程大全-1