Python 正则表达式

Python 正则表达式

介绍

正则表达式(Regular Expression,简称Regex)是一种强大的文本处理工具,它允许我们通过特定的模式(pattern)来搜索、匹配和操作字符串。Python的re模块为我们提供了正则表达式的功能,使得在Python中进行复杂的字符串操作变得简单而高效。

基本概念

字符匹配

  • .:匹配除换行符以外的任意字符。
  • [ ]:匹配括号内的任意一个字符,例如[abc]可以匹配abc
  • [^ ]:匹配不在括号内的任意一个字符,例如[^abc]可以匹配除abc以外的任意字符。
  • *:匹配前一个字符0次或多次。
  • +:匹配前一个字符1次或多次。
  • ?:匹配前一个字符0次或1次。
  • {n}:匹配前一个字符n次。
  • {n,}:匹配前一个字符至少n次。
  • {n,m}:匹配前一个字符至少n次,至多m次。

位置匹配

  • ^:匹配字符串的开始。
  • $:匹配字符串的结束。
  • \b:匹配单词的边界。
  • \B:匹配非单词的边界。

特殊字符匹配

  • \d:匹配任意一个数字字符,等价于[0-9]
  • \D:匹配任意一个非数字字符,等价于[^0-9]
  • \w:匹配任意一个字母数字或下划线字符,等价于[a-zA-Z0-9_]
  • \W:匹配任意一个非字母数字或下划线字符,等价于[^a-zA-Z0-9_]
  • \s:匹配任意一个空白字符,包括空格、制表符、换页符等。
  • \S:匹配任意一个非空白字符。

re模块的基本用法

re.match()

尝试从字符串的起始位置匹配一个模式,如果匹配成功,返回一个匹配对象,否则返回None

python 复制代码
import re

result = re.match(pattern, string)
if result:
    print("匹配成功")
else:
    print("匹配失败")

re.search()

扫描整个字符串并返回第一个成功的匹配,如果匹配成功,返回一个匹配对象,否则返回None

python 复制代码
import re

result = re.search(pattern, string)
if result:
    print("匹配成功")
else:
    print("匹配失败")

re.findall()

找到所有匹配的子串,并返回一个列表。

python 复制代码
import re

result = re.findall(pattern, string)
print(result)

re.sub()

替换匹配的子串。

python 复制代码
import re

new_string = re.sub(pattern, repl, string)
print(new_string)

re.split()

根据模式分割字符串。

python 复制代码
import re

result = re.split(pattern, string)
print(result)

实例

匹配邮箱地址

python 复制代码
import re

pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}"
email = "example@gmail.com"
result = re.match(pattern, email)
if result:
    print("有效的邮箱地址")
else:
    print("无效的邮箱地址")

提取URL中的域名

python 复制代码
import re

pattern = r"http[s]?://([a-zA-Z0-9.-]+)"
url = "https://www.example.com"
result = re.search(pattern, url)
if result:
    print("域名:", result.group(1))
else:
    print("未找到域名")

总结

正则表达式是Python中处理字符串的强大工具,通过掌握正则表达式的语法和Python的re模块,我们可以轻松地完成复杂的字符串操作。

相关推荐
黎雁·泠崖16 分钟前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
季明洵44 分钟前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
墨雪不会编程1 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++
浅念-1 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
小宋10211 小时前
Java 项目结构 vs Python 项目结构:如何快速搭一个可跑项目
java·开发语言·python
一晌小贪欢2 小时前
Python 爬虫进阶:如何利用反射机制破解常见反爬策略
开发语言·爬虫·python·python爬虫·数据爬虫·爬虫python
阿猿收手吧!2 小时前
【C++】异步编程:std::async终极指南
开发语言·c++
小程故事多_802 小时前
Agent Infra核心技术解析:Sandbox sandbox技术原理、选型逻辑与主流方案全景
java·开发语言·人工智能·aigc
沐知全栈开发2 小时前
SQL 日期处理指南
开发语言
黎雁·泠崖2 小时前
【魔法森林冒险】3/14 Allen类(一):主角核心属性与初始化
java·开发语言