正则表达式听着高大上?详解Python正则表达式(附速查字典)

news/2024/11/24 9:11:46/

目录

  • 1 什么是正则表达式?
  • 2 常用元字符
    • 2.1 []
    • 2.2 ^
    • 2.3 $
    • 2.4 \
    • 2.5 {m,n}
    • 2.6 *
    • 2.7 +
    • 2.8 ?
    • 2.9 .
    • 2.10 ()
  • 3 Python正则库re的使用
    • 3.1 字符串替换
    • 3.2 字符串分割
  • 4 常用正则转义字符表
  • 5 常用正则表达式
    • 5.1 数字校验正则
    • 5.2 字符校验正则
    • 5.3 特殊需求正则
  • 6 代码实战

1 什么是正则表达式?

正则表达式(Regular Expression),又称为正规表示法、正规表示式、规则表达式、常规表示法。在代码中常简写为regex、regexp或RE,是计算机科学中用于匹配、查找和操作文本的一种强大工具。正则表达式由一系列字符和特殊字符组成,用于定义一种搜索模式。这些模式可以用于检查文本中是否存在某种特定的模式,或者从文本中提取符合特定模式的部分。

正则表达式的应用非常广泛,常见的应用场景包括:文本搜索和替换、表单验证、数据提取、数据清洗等。正则表达式的语法相对复杂,但是一旦掌握,可以在处理文本数据时提供非常强大和高效的功能。不同编程语言和工具对正则表达式的支持程度有所不同,常见的编程语言如Python、Java、JavaScript等都提供了正则表达式的内置支持。

2 常用元字符

2.1 []

指定字符可选范围 ,其中“-”表示连续选择,[]内的元字符为普通字符,且为单独个体

示例

匹配小写字母和数字: "[a-z0-9]"
匹配a、^或d: "[a^d]"
除了a以外的都匹配: "[^a]"

2.2 ^

从行首开始往后匹配第一个符合模式的字符串

示例

"^abc"

2.3 $

从行末开始往前匹配第一个符合模式的字符串

示例

"abc$"

2.4 \

将下一个字符标记为特殊或原义字符

示例

匹配\n: "\\n"
匹配换行符: "\n"

2.5 {m,n}

定义匹配次数 。省略m表示0下限,省略n表示无穷上限。注意该元字符属于贪婪匹配,即在所有符合匹配规则的字符串中选择匹配次数大的字符串

示例

匹配两个字母: "[a-zA-Z]{2}"

2.6 *

匹配零次或多次,等价于(,)

2.7 +

匹配一次或多次,等价于(1,)

2.8 ?

匹配零次或一次,等价于(0,1),{m,n}?声明非贪婪匹配,即在所有符合匹配规则的字符串中选择匹配次数小的字符串

示例

string = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},\{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},\{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},\{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
print(re.findall(r"tianqi:'(.*?)'", string))

*?先进行贪婪匹配,再进行非贪婪匹配。

首先进行贪婪匹配,从第一个tianqi:'开始到最后一个’为止,其间的字符串均为匹配字符串,即

tianqi:'晴',aqiInfo:'轻度污染'},\
{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},\
{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},\
{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'

接下来在贪婪匹配的结果中进行非贪婪匹配,即从第一个tianqi:'开始到最近一个’为止均为匹配字符串,即

[tianqi:'晴', tianqi:'阴~小雨', tianqi:'小雨~中雨', tianqi:'中雨~小雨']

最后用()进行匹配提取:

['晴', '阴~小雨', '小雨~中雨', '中雨~小雨']

2.9 .

匹配除换行符以外的任意字符

2.10 ()

匹配结果分组提取

3 Python正则库re的使用

3.1 字符串替换

re库提供的方法sub(reg, strReplace, str)subn(reg, strReplace, str)可将符合正则reg的字符串替换成strReplace,区别在于前者仅返回替换后的字符串而后者多返回一个替换次数。

3.2 字符串分割

re库提供的方法split(div, str)可将字符串以分隔符div为界进行分割,返回分割后的数组。

4 常用正则转义字符表

特殊字符说明
\b匹配单词边界。例如’er\b’可匹配"never"中的’er’但不能匹配"verb"中的’er’
\B匹配非单词边界。例如’er\B’可匹配"verb"中的’er’,但不能匹配"never"中的’er’
\d匹配数字字符,等价于[0-9]
\D匹配非数字字符,等价于[^0-9]
\f匹配换页符,等价于\x0c和\cL
\n匹配换行符,等价于\x0a和\cJ
\r匹配回车符,等价于\x0d和\cM
\s匹配空白字符,包括空格、制表符、换页符等。等价于[ \f\n\r\t\v]
\S匹配非空白字符,等价于[^ \f\n\r\t\v]
\t匹配制表符,等价于\x09和\cI
\v匹配一个垂直制表符,等价于\x0b和\cK
\w匹配字母、数字、下划线,等价于[A-Za-z0-9_]
\W匹配非字母、数字、下划线,等价于[^A-Za-z0-9_]

5 常用正则表达式

5.1 数字校验正则

  • 数字:^[0-9]*$
  • m-n位的数字:^\d{m,n}$
  • 正数、负数和小数:^(-|+)?\d+(.\d+)?$
  • 非负整数:^\d+$
  • 非正整数:^-[1-9]\d*|0$
  • 非负浮点数:^\d+(.\d+)?$
  • 非正浮点数:^((-\d+(.\d+)?)|(0+(.0+)?))$
  • 正浮点数:^[1-9]\d*.\d*|0.\d*[1-9]\d*$
  • 负浮点数:^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$
  • 浮点数:^(-?\d+)(.\d+)?$

5.2 字符校验正则

  • 汉字:^[\u4e00-\u9fa5]{0,}$
  • 英文和数字:^[A-Za-z0-9]+$
  • 由26个英文字母组成的字符串:^[A-Za-z]+$
  • 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
  • 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$
  • 禁止输入含有~的字符:[^~\x22]+

5.3 特殊需求正则

  • Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
  • 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  • InternetURL:^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]*)?$
  • 手机号码:^(13[0-9]|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}$
  • 身份证号(15位、18位数字):^\d{15}|\d{18}$
  • 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  • 空白行:\n\s*\r (可以用来删除空白行)
  • HTML:<(\S*?)[^>]>.?</\1>|<.*? />
  • 首尾空白字符:^\s*|\s*KaTeX parse error: Undefined control sequence: \s at position 4: 或(^\̲s̲*)|(\s*) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)
  • 腾讯QQ号:[1-9][0-9]{4,}
  • 中国邮政编码:[1-9]\d{5}(?!\d)
  • IP地址:\d+.\d+.\d+.\d+

6 代码实战

import re# 元字符[] ^ $的应用
print(re.findall("a[a-z0-9]c$","abcabca^caccaaca5c"))# 元字符\的应用
print(re.findall(r'\n','abc\n'))# 元字符{} * + ?的应用
print(re.findall(r'[a-z]{1,2}\d', 'a2b1cd2c12_'))
print(re.findall(r'[a-z]{1,2}?\d', 'a2b1cd2c12_'))
print(re.findall(r'[a-z]?\d', 'a2b1cd2c12_'))
print(re.findall(r'[a-z]*\d', 'a2b1cd2c12_'))
print(re.findall(r'[a-z]+\d', 'a2b1cd2c12_'))# 元字符()的应用
string = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},\{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},\{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},\{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
print(re.findall(r"tianqi:'(.*?)'", string))# 字符串替换
string = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,\先后完成了压力试验(Pressure Test)、真空试验(air)、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'
print(re.sub(r"\(.*?\)|(.*?)", '', string))# 字符串分割
string11 = '22| 101.6,2| 低区/7| 朝南 \
上海未来 - 浦东 - 金杨 - 2005年建'
split = re.split('[-|]', string11)

🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

http://www.ppmy.cn/news/106712.html

相关文章

下载YouTube视频的一种方法

文章目录 工具名称下载方法使用方法1.只下载音频2.下载音频转换成mp3&#xff08;加上-x –audio-format参数&#xff09;3.下载视频&#xff08;带音频&#xff09;ID&#xff1a;22 | EXT&#xff1a;mp4 | 1280*720 下载的数据集&#xff1a;YouCook2 工具名称 yt-dlp 下载…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月29日论文合集)

文章目录 一、检测相关(12篇)1.1 Linear Object Detection in Document Images using Multiple Object Tracking1.2 Hybrid Energy Based Model in the Feature Space for Out-of-Distribution Detection1.3 BEV-IO: Enhancing Birds-Eye-View 3D Detection with Instance Occu…

Arthas 入门到实战(五)动态改日志级别

1、查看当前包下日志级别 logger --include-no-appender --name com.fan.XXX name com.fan.XXX class ch.qos.logback.classic.Logger classLoader sun.misc.Launcher$…

外部引脚中断

FM33A048B的 7 组 GPIO A~G &#xff09;最多可以产生 24 个外部引脚中断。 7 组 GPIO 被分为 3 部分&#xff0c;分 别为 PA/PB 、 PC/PD/PG 和 PE/PF &#xff0c;每部分分别可以选择 8 个引脚产生独立的外部中断&#xff0c;由 4 组控制 寄存器 EXTI_SELx(x0~3) 进行配置&am…

生产环境之负债均衡LVS+keepalived方案(5)_关键知识点

补充知识点 arp_ignore & arp_announce https://www.cnblogs.com/lipengxiang2009/p/7451050.html 这篇博文介绍得很详细&#xff0c;以下主要做重点摘录及自己的一些总结&#xff1a; &#xff08;1&#xff09;arp_ignore理解 arp_ignore参数的作用是控制系统在收到外部…

TypeScript类型

TypeScript 是什么&#xff1f; 是以avaScript为基础构建的语言个一JavaScript的超集。可以在任何支持JavaScript的平台中执行。TypeScript扩展了JavaScript,并添加了类型。TS不能被JS解析器直接执行&#xff0c;需要编译成js。 基本类型 声明完变量直赴进行赋值 let c: boo…

c语言的预处理和编译

预处理 文件包含 当预处理器发现#include指令时&#xff0c;会查看后面的文件名并把文件的内容包含到当前文件中 两种写法 尖括号&#xff1a;引用的是编译器的库路径里面的头文件。 双引号&#xff1a;引用的是程序目录中相对路径中的头文件&#xff0c;如果找不到再去上面…

红外线人体测温仪方案设计

红外线人体测温仪是一款高精度、高效、快速的测温设备&#xff0c;主要用于测量人体表面的温度。在目前的新冠疫情背景下&#xff0c;红外线人体测温仪被广泛应用于各种场所&#xff0c;如医院、企事业单位、地铁站、机场、高铁站、商场、超市等人群密集的地方。本文将从运行原…