Python 正则表达式

基本语法

  • . : 匹配任意单个字符(除换行符外)
  • ^ : 匹配字符串的开始
  • $ : 匹配字符串的结束
  • [] : 匹配字符集中的任何一个字符。例如,[a-z] 匹配任意小写字母
  • | : 匹配左边或右边的表达式。例如,a|b 匹配 'a''b'

量词

  • * : 匹配前面的字符零次或多次
  • + : 匹配前面的字符一次或多次
  • ? : 匹配前面的字符零次或一次
  • {n} : 匹配前面的字符恰好 n 次
  • {n,} : 匹配前面的字符至少 n 次
  • {n,m} : 匹配前面的字符至少 n 次,但不超过 m 次

预定义字符类

  • \d : 匹配任意数字,相当于 [0-9]
  • \D : 匹配任意非数字字符
  • \w : 匹配任意字母、数字和下划线,相当于 [a-zA-Z0-9_]
  • \W : 匹配任意非字母、数字和下划线字符
  • \s : 匹配任意空白字符(空格、制表符、换行符等)
  • \S : 匹配任意非空白字符

分组和捕获

  • () : 用于分组和捕获。例如,(abc)+ 匹配一个或多个 'abc'
  • (?:...) : 非捕获分组,用于分组但不捕获匹配的内容
  • (?P<name>...) : 捕获分组并为其指定名字。例如,(?P<year>\d{4}) 用于捕获年份

反向引用

  • \1, \2, ... : 反向引用前面捕获的组。例如,(a)\1 匹配 'aa'

特殊字符

  • \ : 转义字符。例如,\. 匹配点号 .
  • (?=...) : 正向先行断言。例如,(?=\d) 匹配紧跟在数字前的位置
  • (?<!...) : 负向先行断言。例如,(?<!\d) 匹配不紧跟在数字前的位置
python 复制代码
import re

# 查找所有数字
pattern = r'\d+'
text = 'There are 123 apples and 456 oranges.'
matches = re.findall(pattern, text)
print(matches)  # 输出: ['123', '456']

# 匹配电子邮件地址
pattern = r'[\w\.-]+@[\w\.-]+'
text = 'Contact us at support@example.com or sales@example.org.'
matches = re.findall(pattern, text)
print(matches)  # 输出: ['support@example.com', 'sales@example.org']

# 替换文本中的所有空白字符
pattern = r'\s+'
text = 'This is    a  text with   extra spaces.'
replaced_text = re.sub(pattern, ' ', text)
print(replaced_text)  # 输出: 'This is a text with extra spaces.'

# 匹配身份证号
pattern = r'\d{17}[\dXx]'
text = 'My ID number is 12345678901234567X.'
matches = re.findall(pattern, text)
print(matches)  # 输出: ['12345678901234567X']

1. 手机号码

中国手机号码(11位数字,以1开头,第二位为3-9之间的数字)
python 复制代码
pattern = r'^1[3-9]\d{9}$'

示例

  • 匹配:13812345678
  • 不匹配:12345678901, 1987654321

2. 身份证号码

中国身份证号(15位或18位数字,18位可包含字母X)
python 复制代码
pattern = r'^\d{15}|\d{17}[\dXx]$'

示例

  • 匹配:123456789012345, 123456789012345678, 12345678901234567X
  • 不匹配:12345678901234, 1234567890123456789

3. 邮箱地址

一般的邮箱地址(符合大多数邮箱格式)
python 复制代码
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'

示例

  • 匹配:example@example.com, user.name@sub.domain.com
  • 不匹配:example@com, @example.com

4. 日期(yyyy-mm-dd 格式)

日期(年-月-日,年份为四位,月份和日期为两位,支持闰年)
python 复制代码
pattern = r'^\d{4}-\d{2}-\d{2}$'

示例

  • 匹配:2024-08-25
  • 不匹配:2024-8-25, 25-08-2024

5. 时间(hh:mm格式)

时间(24小时制,时、分、秒各为两位)
python 复制代码
pattern = r'^\d{2}:\d{2}:\d{2}$'

示例

  • 匹配:14:30:00
  • 不匹配:25:00:00, 14:30

6. URL

一般 URL(包括 http/https,主机名,端口,路径等)
python 复制代码
pattern = r'^(https?|ftp)://[^\s/$.?#].[^\s]*$'

示例

  • 匹配:http://www.example.com, https://example.com/path/to/resource
  • 不匹配:http://, example.com

7. IP 地址(IPv4)

IPv4 地址(四组数字,每组 0-255)
python 复制代码
pattern = r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'

示例

  • 匹配:192.168.1.1, 255.255.255.255
  • 不匹配:256.256.256.256, 192.168.1.256

8.银行卡号

银行卡号(通常为 16-19 位数字)
python 复制代码
pattern = r'^\d{16,19}$'

示例

  • 匹配:1234567812345678, 1234567812345678901
  • 不匹配:12345678, 12345678123456789012

9.车牌号码

中国车牌号码(包括字母和数字,通常为7位)
python 复制代码
pattern = r'^[A-Z][A-Z0-9]{6}$'

示例

  • 匹配:京A12345, 粤B12345
  • 不匹配:1234A567, A1234

10.中文字符

匹配中文字符(包括汉字)
python 复制代码
pattern = r'^[\u4e00-\u9fa5]+$'

示例

  • 匹配:你好, 测试
  • 不匹配:hello, hello 你好
相关推荐
古希腊掌管学习的神1 小时前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Evand J2 小时前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
LucianaiB2 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
Ronin3052 小时前
11.vector的介绍及模拟实现
开发语言·c++
计算机学长大白3 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
PieroPc4 小时前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel
2401_857439696 小时前
SSM 架构下 Vue 电脑测评系统:为电脑性能评估赋能
开发语言·php
SoraLuna7 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
xlsw_7 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis