当前位置: 首页 > news >正文

python re 模块 正则表达式

一、正则表达式基本符号

^ 表示匹配字符串的开始位置 (例外 用在中括号中[ ] 时,可以理解为取反,表示不匹配括号中字符串)
$ 表示匹配字符串的结束位置
* 表示匹配 零次到多次(记忆方法:符号是星星,天上的星星可以是无数个也可以看不到
+ 表示匹配 一次到多次 (记忆方法:符号是加号,增加的意思,至少得有一个)
? 表示匹配零次或一次(记忆方法:符号是问号,那就是有或者没有,两种可能
. 表示匹配单个字符
| 表示为或者,两项中取一项
() 小括号表示匹配括号中全部字符
[] 中括号表示匹配括号中一个字符 范围描述 如[0-9 a-z A-Z]
{} 大括号用于限定匹配次数 如 {n}表示匹配n个字符 {n,}表示至少匹配n个字符 {n,m}表示至少n,最多m
\ 转义字符 如上基本符号匹配都需要转义字符 如 \* 表示匹配 * 号、\w 表示英文字母和数字、\W 非字母和数字、\d 表示数字、 \D 非数字、 \s 匹配任何空白字符

更多更详细介绍:点我查看更多正在表达式介绍

常用的正则表达式:

常用的正则表达式匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配IP地址的正则表达式:/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:http://(/[\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
sql语句:^(select|drop|delete|create|update|insert).*$

二、re 模块,函数介绍

2.1 re.compile

该函数将创建一个正则表达式的对象,可以实现更有效率的复用。

import re
find_xx = re.compile('正则表达式', 修饰符)

2.2 re.findall

该函数将会搜索所有满足条件的字符串

import re
r = re.findall('正则表达式', 文本内容, 修饰符)

返回值会因为正则表达式的小括号不同而不同 共计三种情况

2.2.1 当给出的正则表达式不带括号的时候,列表的元素为字符串,此时字符串为整个正则表达式匹配的内容。

import retext = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d{4}年|\d{1}月|\d{2}日')
res = pattern.findall(text)
print(res)
# 输出结果: ['2018年', '9月', '27日']

2.2.2 正则表达式中只有一个括号,列表元素为字符串时,则内容和括号中的正则表达式对应

import re
text = '2018年的下半年,9月份, 27日'
pattern = re.compile(r'\d+(年|月|日|)')
res = pattern.findall(text)
print(res)
# 输出结果: ['年', '月', '日']

2.2.3 如果正则表达式中有多个括号时,列表的元素为多个字符组合成的元组,元组中的字符串格式与括号数对应,内容与正则表达式顺序对应。

import retest = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)# 输出结果为:[('8','年'),('9','月'),('7','日')]

如果不希望按小括号分组,可以在小括号开头输入 ?:  ,输出结果与 2.2.1 一致

import retest = '2018年的下半年, 9月份, 27日'
pattern = re.compile(r'(\d)+(年|月|日)')
res = pattern.findall(test)
print(res)# 输出结果为:['2018年', '9月', '27日']

2.3 re.finditer

搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是 match 对象,相比 re.findall 它可以获取匹配的位置

import re# 编译正则表达式对象
pattern = re.compile(r'ab.*c')# 在字符串中查找匹配正则表达式的内容
text = 'abcfabcgabch'
matches = pattern.finditer(text)# 遍历所有匹配
for match in matches:start_pos = match.start()end_pos = match.end()match_str = match.group()print('Match found:', match_str)print('Start position:', start_pos)print('End position:', end_pos)

2.4 re.search

搜索第一个满足条件的字符串,查找到第一个停止

import re
find_xx = re.compile('正则表达式', '修饰符')
res = re.search(find_xx, text)

2.5 re.sub

替换所有满足条件的字符串

import re
text = 'hello 123 world 456'
replacedStr = re.sub("\d+","222",text)
print(replacedStr)
# 返回'hello 222 world 222'

 2.6 re.split

匹配分割string maxsplit是允许被分割成几个子串,默认是0最大化字串,如果是1则是从原本字符串中切出一个字串,其他字串整串返回。

import re
a = re.split('正则表达式', '文本', [maxsplit=0])
print(a)

2.7 group([group1,....])

返回一个或者多个子组,更详细介绍:点我查看

import re
m = re.search('正则表达式','文本')
print(m.group(2))
# 返回第二个字串
http://www.lryc.cn/news/119153.html

相关文章:

  • c#设计模式-创建型模式 之 单例模式
  • K-01BFS(2023河南萌新联赛第(五)场:郑州轻工业大学)
  • CSP复习每日一题(四)
  • dubbo之整合SpringBoot
  • UE 5 GAS 在项目中处理AttributeSet相关
  • JDBC数据库连接
  • gitee分支合并
  • Python小白入门:文件、异常处理和json格式存储数据
  • 16bit、8 通道、500kSPS、 SAR 型 ADC——MS5188N
  • Chapter 12: Regular expressions | Python for Everybody 讲义笔记_En
  • Android javaMail mergeDebugJavaResource FAILED解决
  • 【ArcGIS Pro二次开发】(57):地图系列
  • 秋招打卡015(20230811)
  • 如何使用Word转PDF转换器在线工具?在线Word转PDF使用方法
  • 自然语言处理从入门到应用——LangChain:记忆(Memory)-[记忆的类型Ⅰ]
  • Camunda 7.x 系列【7】Spring Boot 集成 Camunda 7.19
  • 24华东交通软件工程837考研题库
  • nginx 以及nginx优化
  • cesium学习记录04-坐标系
  • P5737 【深基7.例3】闰年展示
  • Nacos的安装使用教程Linux
  • 数据结构-学习
  • 【MFC】05.MFC六大机制:程序启动机制-笔记
  • Von Maur, Inc EDI 需求分析
  • [深度学习入门]PyTorch深度学习[Numpy基础](上)
  • Excel vost 实现照光灯效果
  • IntelliJ中文乱码问题
  • 【C++】红黑树模拟实现插入功能(包含旋转和变色)
  • Pads输出器件坐标文件时,如何更改器件坐标精度
  • Vuejs3父组传值给子组件