Python:正则表达式速通,码上上手!

1前言

正则表达式(Regular Expression)是一种用来描述字符串模式的表达式。它是一种强大的文本匹配工具,可以用来搜索、替换和提取符合特定模式的文本。

正则表达式由普通字符(例如字母、数字、符号等)和元字符(用于描述模式的特殊字符)组成。通过结合这些字符,可以创建一个模式,用来匹配文本中符合特定规则的部分。

正则表达式在我们日常开发中十分常用 ,可以用来数据提取文本处理 ,同时也是面试中比较常问的问题,学好正则表达式是Python开发工程师的必备项!

看了一下网上很多正则表达式的文章,对于小白来说实在有点难接受

1 符号 .

匹配任意的单个字符

python 复制代码
import re
context = '''
    苹果是绿色的,橘子是黄色的,头发是黑色的
'''
##  r 表达不发生转义
p = re.compile(r'.色')
print(p.findall(context))
## ['绿色', '黄色', '黑色']

2 符号 *

匹配前面子表达式任意次(包括0次) 常常与 . 搭配使用

python 复制代码
p = re.compile(r'是.*')
print(p.findall(context))
#['是绿色的,', '是黄色的,', '是黑色的']
p = re.compile(r'.*是')
print(p.findall(context))
#['苹果是', '橘子是', '头发是']
context = "我是是是是大帅哥,\n你是嘿嘿黑,\n欸我的饭呢"
p = re.compile(r'是*')
print(p.findall(context))
#['', '是是是是', '', '', '', '', '', '', '是', '', '', '', '', '', '', '', '', '', '', '']

3 符号 +

和 * 类似 表示至少出现一次

python 复制代码
context = "我是是是是大帅哥,\n你是嘿嘿黑,\n欸我的饭呢"
p = re.compile(r'是+')
print(p.findall(context))
#['是是是是', '是']

4 符号 {}

指定匹配次数

python 复制代码
p = re.compile(r'是{2,5}')
#print(p.findall(context))
#['是是是是']
context = '''我的电话号码是12345678901,地址在深圳技术大学'''
p = re.compile(r'\d{11}')
print(p.findall(context))
#['12345678901']

5 符号 ?

是否贪心:

贪婪模式和非贪婪模式

'*' '+' 都是贪心的,会尽量多地匹配

在 '*' '+' 之后加上 '?' 表示非贪心

python 复制代码
context = '''<1><2><3><4>'''
p = re.compile(r'<.*?>')
#print(p.findall(context))
#['<1>', '<2>', '<3>', '<4>']
p = re.compile(r'<.*>')
#print(p.findall(context))
#['<1><2><3><4>']     #贪心

6 符号 \

①转义

②特定字符

\d 匹配数字 \D 匹配不是数字的

\s 匹配任意地空白字符 \S 匹配非空白

\w 匹配文字字符(数字、字母、下划线)\W 匹配非文字字符

7 符号 []

python 复制代码
context = '''
leo,qq1234567890,18
penry,qq2234567890,19
anry,qq09878976454,20
makerry,qq1456789091,18'''
p = re.compile(r'qq[123]\d{9}')
print(p.findall(context))
#['qq1234567890', 'qq2234567890', 'qq1456789091']

8 符号 ^

非 与 [] 搭配 也可以表示匹配开口

python 复制代码
context = "abc123,123abc,hekl1,his12,213f,abc"
p = re.compile(r'[a-z]+[0-9]{3}')
#print(p.findall(context))
#['abc123']
p = re.compile(r'[^0-9]{3}')
print(p.findall(context))
#['abc', 'abc', ',he', ',hi', 'f,a']

单行模式:匹配文本的起始位置

多行模式:匹配文本每行的起始位置

python 复制代码
context = '''
001-apple-60,\n
002-pear-70,\n
003-banner-30'''
p = re.compile(r'^\d+',re.MULTILINE)  ##   缺省是单行    M是多行模式    
print(p.findall(context))
#['001', '002', '003']

9 符号 $

从文本末开始匹配

python 复制代码
context = '''
001-apple-60
002-pear-70
003-banner-30'''
p = re.compile(r'^\d+',re.MULTILINE)  ##   缺省是单行    M是多行模式    
print(p.findall(context))
#['001', '002', '003']
p = re.compile(r'\d+$',re.MULTILINE)
print(p.findall(context))
#['60', '70', '30']

10 符号 ()

分组提取

python 复制代码
context = '''
苹果是绿色的,\n橘子是黄色的,\n头发是黑色的
'''
##   消除标识符
p = re.compile(r'(.+)是')
#print(p.findall(context))
#['苹果', '橘子', '头发']
p = re.compile(r'(.+)是(.+色)的')
#print(p.findall(context))
#[('苹果', '绿色'), ('橘子', '黄色'), ('头发', '黑色')]
context = '''
leo,qq1234567890,18
penry,qq2234567890,19
anry,qq09878976454,20
makerry,qq1456789091,18'''
p = re.compile(r'(.+),qq([123]\d{9})')
#print(p.findall(context))
#[('leo', '1234567890'), ('penry', '2234567890'), ('makerry', '1456789091')]

11 \number

分组概念的举例:匹配ABAC或者AABB的成语

引用前面匹配的第n个组的内容

python 复制代码
## 找出 ABAC AABB 型的成语
#           123        45    6
pattern = r'(((.).\3.)|((.)\5(.)\6))'
#              A B AC |  A  A B  B
## 找出 AABC ABAC 型的成语
#           123        45
pattern = r'(((.)\3..)|((.).\5.))'
#              A  ABC    A B AC

看到这里你已经掌握了基本的正则表达式的使用'姿势'了,在日常的大部分使用场景中都足以应对了,恭喜你!

相关推荐
Bonne journée1 分钟前
‌在Python中,print(f‘‘)是什么?
java·开发语言·python
iiimZoey25 分钟前
Dit架构 diffusion范式分类+应用
人工智能·python
R三哥哥啊26 分钟前
【树莓派5B】IO串口通信使用
python
互联网时光机1 小时前
python写的window小工具-一键设置ip自动获取ip
网络·windows·python
SCBAiotAigc1 小时前
VSCode debug模式无法跳转进入内置模块
人工智能·vscode·python
卓琢1 小时前
(九)Shell 脚本(四):正则表达式、sed 和 awk 详解
linux·mysql·正则表达式
call_me_wangcheng1 小时前
django创建项目
python·django
VXbishe1 小时前
(附源码)基于springboot的“我来找房”微信小程序的设计与实现-计算机毕设 23157
java·python·微信小程序·node.js·c#·php·课程设计
chusheng18401 小时前
Python 如何使用 multiprocessing 模块创建进程池
python·信息可视化·matplotlib
猿小猴子1 小时前
Python3 爬虫 中间人爬虫
开发语言·爬虫·python