《正则表达式》

《正则表达式》一 正则表达式基础 1 什么是正则表达式 正则表达式 Regular Expression 简称 regex 是一种用于匹配和处理文本的强大工具 通过特殊符号和语法描述字符串模式

欢迎大家来到IT世界,在知识的湖畔探索吧!

一、正则表达式基础

1. 什么是正则表达式?

正则表达式(Regular Expression,简称regex)是一种用于匹配和处理文本的强大工具,通过特殊符号和语法描述字符串模式。
典型场景

  • 验证邮箱、手机号格式
  • 提取URL、IP地址
  • 替换敏感词
  • 分割字符串

二、Python中的正则表达式模块:re

Python通过re模块支持正则表达式操作,核心方法包括:

  • re.match():从字符串开头匹配
  • re.search():搜索整个字符串的第一个匹配
  • re.findall():返回所有匹配的列表
  • re.sub():替换匹配的文本
  • re.compile():预编译正则表达式(提升性能)

三、正则表达式语法

1. 基础符号

符号

作用

示例

匹配结果

.

匹配任意字符(除换行符)

a.c → 匹配abc

abc

*

匹配前一个字符0次或多次

ab* → 匹配a、ab、abb

abb

+

匹配前一个字符1次或多次

ab+ → 匹配ab、abb

ab

?

匹配前一个字符0次或1次

colou?r → 匹配color或colour

color

{n}

匹配前一个字符恰好n次

a{3} → 匹配aaa

aaa

{n,m}

匹配前一个字符n到m次

a{2,4} → 匹配aa、aaa、aaaa

aaa

^

匹配字符串开头

^Hello → 匹配以Hello开头的字符串

Hello World

$

匹配字符串结尾

World$ → 匹配以World结尾的字符串

Hello World

[]

匹配字符集

[abc] → 匹配a、b或c

a

[^…]

匹配非字符集

[^0-9] → 匹配非数字字符

a

2. 特殊字符转义

若需匹配特殊字符本身(如.、*),需使用反斜杠\转义:

pattern = r"\." # 匹配字面意义的点号 

欢迎大家来到IT世界,在知识的湖畔探索吧!

3. 分组与捕获

  • 分组:用()包裹子模式,便于提取或重复。
欢迎大家来到IT世界,在知识的湖畔探索吧!pattern = r"(\d{4})-(\d{2})-(\d{2})" # 分组匹配日期(年-月-日) match = re.match(pattern, "2025-07-19") print(match.group(1)) # 输出:2025 
  • 命名分组:为分组命名,便于引用。
pattern = r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})" match = re.match(pattern, "2025-07-19") print(match.group("year")) # 输出:2025 

4. 贪婪与非贪婪匹配

  • 贪婪模式(默认):尽可能匹配更多字符。
欢迎大家来到IT世界,在知识的湖畔探索吧!pattern = r"<.*>"  # 匹配`<html>content</html>`中的`<html>content</html>`
  • 非贪婪模式:尽可能匹配更少字符(在量词后加?)。
pattern = r"<.*?>"  # 匹配`<html>content</html>`中的`<html>`和`</html>`

四、实战案例

案例1:验证邮箱格式

欢迎大家来到IT世界,在知识的湖畔探索吧!import re email = "" pattern = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+#34; if re.match(pattern, email): print("邮箱格式正确!") else: print("邮箱格式错误!") 

案例2:提取URL链接

text = "访问官网: https://www.example.com 或 http://blog.example.com " pattern = r"https?://\S+" urls = re.findall(pattern, text) print(urls) # 输出:[' https://www.example.com ', ' http://blog.example.com '] 

案例3:替换敏感词

欢迎大家来到IT世界,在知识的湖畔探索吧!text = "这个产品非常棒,但是价格太贵了!" pattern = r"\b(贵|棒)\b" replacement = "*" * len(r"\1") censored_text = re.sub(pattern, replacement, text, flags=re.IGNORECASE) print(censored_text) # 输出:这个产品非常,但是价格太*了! 

案例4:分割字符串

text = "apple,banana;orange,grape" pattern = r"[,;]" # 用逗号或分号分割 fruits = re.split(pattern, text) print(fruits) # 输出:['apple', 'banana', 'orange', 'grape'] 

五、常见问题与解决方案

1. 如何匹配换行符?

默认情况下,.不匹配换行符。使用re.DOTALL标志启用换行匹配:

欢迎大家来到IT世界,在知识的湖畔探索吧!pattern = re.compile(r".*", re.DOTALL) match = pattern.match("line1\nline2") print(match.group()) # 输出:line1\nline2 

2. 如何忽略大小写?

使用re.IGNORECASE(或re.I)标志

pattern = re.compile(r"python", re.IGNORECASE) match = pattern.match("PYTHON") # 匹配成功 

3. 如何处理中文字符?

直接在正则表达式中包含中文字符即可:

欢迎大家来到IT世界,在知识的湖畔探索吧!pattern = r"\b(你好|谢谢)\b" text = "你好,今天天气不错,谢谢!" matches = re.findall(pattern, text) print(matches) # 输出:['你好', '谢谢'] 

4. 性能优化

  • 预编译正则表达式:对重复使用的模式预编译。
pattern = re.compile(r"\d{4}-\d{2}-\d{2}") result = pattern.match("2025-07-19") 
  • 避免过度使用通配符:减少.*的滥用,提高匹配效率。

六、总结与下一步

  • 核心收获
    • 掌握正则表达式基础语法(字符集、量词、分组)。
    • 熟悉Python re模块的核心方法(match、search、findall、sub)。
    • 能解决实际问题(邮箱验证、URL提取、敏感词替换)。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/138389.html

(0)
上一篇 32分钟前
下一篇 2025年 7月 17日 上午7:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信