首页 > 编程语言 >Python笔记 - 正则表达式

Python笔记 - 正则表达式

时间:2024-06-14 09:01:29浏览次数:26  
标签:匹配 re Python pattern 笔记 正则表达式 text print match

正则表达式(Regular Expression,简称regex)是一种强大的工具,用于匹配字符串模式。在Python中,正则表达式通过re模块提供。本文将带你深入了解Python中的正则表达式,从基础概念到高级用法。

1. 什么是正则表达式?

正则表达式是一种用来描述字符串模式的方法。它可以用来匹配、查找和替换文本中的特定模式。通过使用正则表达式,你可以定义一些规则,然后搜索文本中符合这些规则的内容。这种功能在文本处理、数据抽取和字符串匹配等领域非常有用。

2. 基本概念

在介绍具体用法之前,先了解一些基本概念:

  • 模式(Pattern):正则表达式的核心,由字符和特殊符号组成,用于描述字符串的规则。
  • 匹配(Match):字符串是否符合模式。
  • 组(Group):通过括号()来定义子模式,方便提取子字符串。

3. 常用符号

以下是一些常用的正则表达式符号:

  • .:匹配除换行符以外的任意字符。
  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • *:匹配前一个字符零次或多次。
  • +:匹配前一个字符一次或多次。
  • ?:匹配前一个字符零次或一次。
  • {n}:匹配前一个字符n次。
  • {n,m}:匹配前一个字符n到m次。
  • []:匹配方括号内的任意字符。
  • |:匹配左右任意一个表达式。
  • \d:匹配任何数字,相当于[0-9]
  • \D:匹配任何非数字字符。
  • \w:匹配任何字母、数字、下划线字符。
  • \W:匹配任何非字母、数字、下划线字符。
  • \s:匹配任何空白字符(包括空格、制表符等)。
  • \S:匹配任何非空白字符。

4. Python中的正则表达式

在Python中,可以使用re模块进行正则表达式操作。以下是一些常用方法:

导入re模块

import re

re.match()

re.match从字符串的起始位置匹配正则表达式。

import re

pattern = r'hello'
text = 'hello world'
match = re.match(pattern, text)

if match:
    print("Match found:", match.group())
else:
    print("No match")

re.search()

re.search扫描整个字符串并返回第一个成功的匹配。

import re

pattern = r'world'
text = 'hello world'
match = re.search(pattern, text)

if match:
    print("Match found:", match.group())
else:
    print("No match")

re.findall()

re.findall返回字符串中所有非重叠的匹配。

import re

pattern = r'\d+'
text = 'There are 123 apples and 456 oranges.'
matches = re.findall(pattern, text)

print("Matches found:", matches)

re.sub()

re.sub用于替换字符串中的匹配项。

import re

pattern = r'apples'
replacement = 'bananas'
text = 'I like apples'
new_text = re.sub(pattern, replacement, text)

print("Replaced text:", new_text)

re.split()

re.split用于根据匹配项拆分字符串。

import re

pattern = r'\s+'
text = 'Split this sentence into words.'
words = re.split(pattern, text)

print("Words:", words)

使用分组

分组是正则表达式的强大功能之一,可以提取子字符串。

import re

pattern = r'(\d+)-(\d+)-(\d+)'
text = 'My phone number is 123-456-7890'
match = re.search(pattern, text)

if match:
    print("Full match:", match.group(0))
    print("Area code:", match.group(1))
    print("Prefix:", match.group(2))
    print("Line number:", match.group(3))

5. 高级用法

非贪婪匹配

默认情况下,正则表达式是贪婪的,会匹配尽可能多的字符。使用?可以进行非贪婪匹配。

import re

text = 'He said: "Hello, world!"'
pattern_greedy = r'".*"'
pattern_nongreedy = r'".*?"'

match_greedy = re.search(pattern_greedy, text)
match_nongreedy = re.search(pattern_nongreedy, text)

print("Greedy match:", match_greedy.group())
print("Non-greedy match:", match_nongreedy.group())

命名组

使用命名组可以更方便地提取子字符串。

import re

pattern = r'(?P<area>\d+)-(?P<prefix>\d+)-(?P<line>\d+)'
text = 'My phone number is 123-456-7890'
match = re.search(pattern, text)

if match:
    print("Area code:", match.group('area'))
    print("Prefix:", match.group('prefix'))
    print("Line number:", match.group('line'))

6. 实战案例

验证邮箱地址

import re

def is_valid_email(email):
    pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
    return re.match(pattern, email) is not None

email = '[email protected]'
print("Is valid email:", is_valid_email(email))

提取URL中的域名

import re

def extract_domain(url):
    pattern = r'https?://(www\.)?(\w+\.\w+)'
    match = re.search(pattern, url)
    if match:
        return match.group(2)
    return None

url = 'https://www.example.com/path/to/page'
print("Domain:", extract_domain(url))

7. 结论

正则表达式是一种非常强大的工具,可以极大地简化字符串处理任务。在Python中,re模块提供了丰富的正则表达式功能。通过本文的介绍,相信你已经掌握了基本的正则表达式语法和一些常用的操作。希望这些内容能够帮助你在日常编程中更加高效地处理字符串。

标签:匹配,re,Python,pattern,笔记,正则表达式,text,print,match
From: https://blog.csdn.net/jiangnanjunxiu/article/details/139668466

相关文章

  • C++学习笔记-----类和构造函数
    类和结构体class和struct的区别在于class默认是private的而struct默认是public的struct继承自另一个struct或class时,默认继承方式是public继承class继承自另一个class或struct时,默认继承方式是private继承class继承自struct,则默认继承方式还是public,以保持......
  • 【python】用panda3d实现简易版《Minecraft》
    1.下載panda3d等等     panda3d是python的一个第三方库,在Windows的cmd下输入即可下載:pipinstallpanda3d     另外还用了 PIL,Pmw,ttkbootstrap這些第三方库,下載方式同上。。。2.方块模型     对于建模小白来说,blender有亿点难!! (资源放......
  • php反序列化个人笔记
    反序列化什么是反序列化?格式转换序列化:对象转换为字符串或者数组等格式反序列化:将数组或字符串转换成对象为什么会出现安全漏洞?魔术方法如何利用漏洞?通过构造pop链,找到代码的逻辑漏洞,进行getshell,rce等操作反序列化利用分为三类魔术方法的调用逻辑语言原生类的调用逻......
  • PHP正则表达式
    PHP正则表达式函数PHP正则表达式介绍正则表达式允许您搜索和替换字符串中的模式。安装PHP正则表达式函数是PHP核心的一部分。无需安装即可使用这些功能。运行时配置php.ini中的这些设置可用于限制计算正则表达式时使用的时间或资源量。名称默认值描述Changea......
  • 【学习笔记】透视HTTP协议(五):什么是DNS?
     本文是一篇学习笔记,学习的课程是极客时间的《透视HTTP协议》。透视HTTP协议_HTTP_HTTPS-极客时间(geekbang.org)DNS(DomainNameSystem)是域名系统的缩写,它是一个分布式数据库系统,用于将人们易于记忆和理解的域名(如 www.example.com)转换为计算机能够理解和处理的IP地址(如......
  • 《Linux命令行与shell脚本编程大全(第3版)》读书笔记
    一、初识linuxshell1、什么是linuxLinux可划分为以下四部分:Linux内核、GNU工具(如shell)、图形化桌面环境、应用软件1)深入探究linux内核内核主要负责以下四种功能:系统内存管理、软件程序管理、硬件设备管理、文件系统管理2)GNU工具(1)核心GNU工具:GNU项目的主旨在于为Unix......
  • 哪些方法可以让 Python 代码易维护
    随着软件项目进入“维护模式”,对可读性和编码标准的要求很容易落空(甚至从一开始就没有建立过那些标准)。然而,在代码库中保持一致的代码风格和测试标准能够显著减轻维护的压力,也能确保新的开发者能够快速了解项目的情况,同时能更好地全程保持应用程序的质量。使用外部库来检查代......
  • 基于python-CNN深度学习的手势识别数字-含数据集+pyqt界面
    代码下载:https://download.csdn.net/download/qq_34904125/89379220本代码是基于pythonpytorch环境安装的。下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。或可直接参考下面博文进行环境安装。深度学习环境安装教程-anaconda-python-pyto......
  • 基于python_cnn深度学习的decks的裂缝识别-含数据集+pyqt界面
    代码下载:https://download.csdn.net/download/qq_34904125/89379212本代码是基于pythonpytorch环境安装的。下载本代码后,有个requirement.txt文本,里面介绍了如何安装环境,环境需要自行配置。或可直接参考下面博文进行环境安装。深度学习环境安装教程-anaconda-python-pyto......
  • 线段树学习笔记
    线段树(SegmentTree)是一种基于分治思想的数据结构,可以在\(\mathcal{O}(\log~n)\)的时间内完成区间修改和区间查询等操作。1.1线段树基础此部分介绍普通线段树的基本思想与操作。1.1.1基本思想线段树本质上就是一棵二叉树,它的每一个节点表示一段区间的信息,对于一个长度不为......