博客
关于我
python基础之---正则表达式
阅读量:797 次
发布时间:2023-03-07

本文共 3233 字,大约阅读时间需要 10 分钟。

Python基础之—正则表达式

正则表达式简介

正则表达式在网络爬虫、数据分析等领域具有广泛应用。掌握正则表达式能够显著提升工作效率,是每个开发人员必备的技能。

字符匹配

2.1 方法与功能

方法 功能描述
match() 从字符串的开头匹配正则表达式,返回匹配对象或None。
search() 在字符串中找到正则表达式匹配的第一个位置,返回匹配对象。
findall() 在字符串中找到所有匹配正则表达式的位置,并返回结果列表。
finditer() 类似于findall(),但返回的是匹配对象的迭代器,适用于大量数据处理。

2.2 特殊字符

特殊字符 含义
\d 匹配任意十进制数字,等价于 [0-9]。
\D 匹配任意非十进制数字字符,等价于 [^0-9]。
\s 匹配任意空白字符,包括空格、换行符、制表符等。
\S 匹配任意非空白字符,等价于 [^ \t\n\r\f\v]。
\w 匹配任意单词字符,包括大小写字母、数字和下划线,等价于 [a-zA-Z0-9_]。
\W 匹配任意非单词字符,等价于 [^a-zA-Z0-9_](默认情况下)。
\b 匹配单词边界,表示词的开始或结束位置。
\B 匹配非单词边界位置。

2.3 练习

import re
# 匹配数字
arr = re.findall('\dcm', '我的身高是178cm 体重是66kg 厘米是cm')
print(arr) # 输出: ['178cm', '66kg', 'cm']
# 匹配非数字
arr = re.findall('\Dcm', '我的身高是178cm 体重是66kg 厘米是cm')
print(arr) # 输出: ['是cm', '是cm']
# 匹配空格
arr = re.findall('\s体', '我的身高是178cm 体重是66kg 厘米是cm')
print(arr) # 输出: [' ', '体']
# 匹配非空格
arr = re.findall('\S', '我的身高是178cm 体重是66kg 厘米是cm')
print(arr) # 输出: ['1', '7', '8', 'c', 'm', '体', '重', '是', '6', '6', 'k', 'g', '厘', '米', '是', 'c', 'm']

数量控制

使用正则表达式可以通过 *、+、?、{、} 等量词来控制匹配的数量。

2.1 重复0次或多次

arr = re.findall("66*6", "zhl66666")
print(arr) # 输出: ['66666']

2.2 重复1次或多次

arr = re.findall("[0-5]+jpg", "zhl123542jpg")
print(arr) # 输出: ['123542jpg']

2.3 重复0次或1次

arr = re.findall("[0-5]?jpg", "zhl123542jpg")
print(arr) # 输出: ['2jpg']

2.4 重复n次

arr = re.findall("[0-5]{3}jpg", "zhl123542jpg")
print(arr) # 输出: ['542jpg']

2.5 重复n次或多次

arr = re.findall("[0-5]{3,}jpg", "zhl123542jpg")
print(arr) # 输出: ['123542jpg']

2.6 重复n次到m次

arr = re.findall("[0-5]{3,5}jpg", "zhl123542jpg")
print(arr) # 输出: ['23542jpg']

分组

4.1 ()提取兴趣区域

import re
text = '子恒,把鸡蛋弹碎,弹碎给你我的电话号码16609549548,qq2579478480号码'
data = re.findall(r'号码(\d+)', text)
print(data) # 输出: ['16609549548']

4.2 (|)提取多种可能

text = '子恒,把鸡蛋弹碎,弹碎给你我的电话号码16609549548,qq2579478480号码jpg'
data = re.findall(r'号码(\d{11}|jpg)', text)
print(data) # 输出: ['16609549548', 'jpg']

开始和结束

5.1 ^开始

import re
text = '子恒,把鸡蛋弹碎,弹碎给你我的电话号码16609549548,qq2579478480号码'
data = re.findall(r'257\d+', text)
print(data) # 输出: ['2579478480']

5.2 $结尾

import re
text = 'qq2579478480,qq2579478481'
data = re.findall(r'qq\d+$', text)
print(data) # 输出: ['qq2579478481']

特殊字符处理

由于正则表达式中 *、.、{}、() 等符号具有特殊含义,直接使用可能导致错误。需要使用反斜杠进行转义。

import re
text = "数学中集合的写法是{2}"
data = re.findall(r"\{2\}", text)
print(data) # 输出: ['{2}']

常用方法

7.1 re.findall

import re
arr = re.findall('123', 'runoob 123 google 456')
print(arr) # 输出: ['123']

7.2 re.match

arr = re.match('runoob', 'runoob 123 google 456')
print(arr) # 输出:

7.3 re.search

arr = re.search('123', 'runoob 123 google 456')
print(arr) # 输出:

7.4 re.sub

arr = re.sub('123', '456', 'runoob 123 google 123')
print(arr) # 输出: 'runoob 456 google 456'

7.5 re.split

arr = re.split('\s', 'runoob 123 google 123')
print(arr) # 输出: ['runoob', '123', 'google', '123']

7.6 re.finditer

arr = re.finditer('123', 'runoob 123 google 123')
for i in arr:
print(i) # 输出:
#

常见正则表达式

  • QQ号: [1-9][0-9]{4,} (腾讯QQ号从10000开始)
  • 帐号: ^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  • 手机号码: ^(13[09]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  • Email地址: ^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  • 密码: ^[a-zA-Z]\w{5,17}$
  • 身份证号: ^\d{15}|\d{18}$
  • 短身份证号码: ^([0-9]){7,18}(x|X)?$^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

转载地址:http://eoofk.baihongyu.com/

你可能感兴趣的文章
python 多进程-进阶-进程间通信之Queue
查看>>
Python编程快速入门
查看>>
Python编程基础(附Pycharm与开发环境)
查看>>
python 如何“否定“value : 如果为真则返回假,如果为假则返回真
查看>>
Python 如何在 Web 环境中使用 Matplotlib 进行数据可视化
查看>>
python 如何把字符串转换成浮点数
查看>>
python 如果文件夹不存在就创建文件夹
查看>>
Python 如果有很多或以收缩形式
查看>>
Python 子进程 Popen 与 Pyinstaller
查看>>
Python 子进程 Popen.communicate() 等价于 Popen.stdout.read()?
查看>>
Python 子进程 Popen:为什么会出现“ls *.txt“?不行?
查看>>
Python 子进程参数
查看>>
python 字典 key 和value 互换
查看>>
Python 字典 vs If 语句速度
查看>>
python 字典sorted自定义排序,按照key or value排序
查看>>
python 字典和列表区别_元组列表和字典的主要区别是什么?
查看>>
python 字符串中特定字符替换,截取
查看>>
Python 字符串总结
查看>>
python 字符串显示中文_Python字符串开头的b"、u"、r"与中文乱码
查看>>
Python 字符串的几种拼装方式
查看>>