邗江区做网站,优化的含义是什么,有哪些做兼职的设计网站有哪些工作内容,营销网站科技#x1f680; 个人主页#xff1a;xmp65535 #x1f680; 专栏#xff1a;python技术专栏 目录
一、概述
二、基本概念
模式字符串
原始字符串
编译正则表达式
三、正则表达式的基本模式匹配
字符匹配
锚点
量词
四、常用函数
re.match()
re.search()
re.find… 个人主页xmp65535 专栏python技术专栏 目录
一、概述
二、基本概念
模式字符串
原始字符串
编译正则表达式
三、正则表达式的基本模式匹配
字符匹配
锚点
量词
四、常用函数
re.match()
re.search()
re.findall()
re.finditer()
re.sub()
五、高级主题
分组和捕获
非贪婪匹配
前瞻和后顾零宽断言
六、编译正则表达式
七、错误处理 一、概述
正则表达式是一种强大的字符串匹配工具通过定义搜索模式可以在文本中搜索、替换符合条件的字符串。在 Python 中正则表达式模块由 re 提供支持。本文将详细介绍正则表达式的语法、常用函数和高级用法。
二、基本概念
模式字符串
正则表达式由模式字符串定义它包含了正则表达式的语法和符号。
原始字符串
建议使用原始字符串前面带有r的字符串来表示模式字符串这样可以避免转义字符带来的混淆。
pattern r\bfoo\b编译正则表达式
虽然可以直接使用正则表达式但编译正则表达式可以提高效率尤其是在多次使用同一表达式时。
compiled_pattern re.compile(r\bfoo\b)三、正则表达式的基本模式匹配
字符匹配 .匹配除换行符以外的任何单个字符[...]匹配字符集合中的一个字符[^...]匹配不在字符集合中的一个字符\d匹配任何数字等价于[0-9]\D匹配任何非数字字符等价于[^0-9]\s匹配任何空白字符包括空格、制表符、换页符等等价于[ \t\n\r\f\v]\S匹配任何非空白字符等价于[^ \t\n\r\f\v]\w匹配任何字母数字字符等价于[a-zA-Z0-9_]\W匹配任何非字母数字字符等价于[^a-zA-Z0-9_] 锚点 ^匹配字符串的开头$匹配字符串的结尾\A匹配字符串的开始不受多行模式的影响\Z匹配字符串的结束不受多行模式的影响\b匹配一个单词边界\B匹配非单词边界 量词 *匹配前面的子表达式零次或多次匹配前面的子表达式一次或多次?匹配前面的子表达式零次或一次{n}匹配前面的子表达式恰好n次{n,}匹配前面的子表达式至少n次{n,m}匹配前面的子表达式至少n次但不超过m次 四、常用函数
re.match()
re.match()函数从字符串的开始处匹配正则表达式。如果匹配成功返回一个匹配对象否则返回None。
match re.match(r\d, 123abc)
if match:print(Found:, match.group(0))re.search()
re.search()函数在整个字符串中搜索匹配的正则表达式返回第一个匹配对象。
search re.search(r\d, abc123def)
if search:print(Found:, search.group(0))re.findall()
re.findall()函数返回字符串中所有匹配正则表达式的部分的列表。
findall re.findall(r\d, 123abc456def)
print(All matches:, findall)re.finditer()
re.finditer()函数返回一个迭代器其中包含字符串中所有匹配正则表达式的部分。
for match in re.finditer(r\d, 123abc456def):print(Found:, match.group(0))re.sub()
re.sub()函数用于替换字符串中匹配正则表达式的部分。
replaced re.sub(r\d, number, 123abc456def)
print(Replaced:, replaced)五、高级主题
分组和捕获
使用圆括号进行分组可以在后面引用这些分组。
grouped re.search(r(\d).(\d), 123abc456def)
if grouped:print(First group:, grouped.group(1))print(Second group:, grouped.group(2))非贪婪匹配
在Python的re模块中正则表达式默认是贪婪匹配。这意味着在进行匹配时正则表达式会尽可能地匹配更多的字符。
在量词(*, , ?, {n,m})后面加上?可以进行非贪婪匹配即尽可能少地匹配字符。
nongreedy re.search(r\d?, 123abc)
if nongreedy:print(Non-greedy match:, nongreedy.group(0))前瞻和后顾零宽断言
使用前瞻和后顾可以在不包含在匹配中的情况下断言此位置前后是否能匹配模式。
正前瞻 (?...)匹配...前面的位置。负前瞻 (?!...)匹配不在...前面的位置。正后顾 (?...)匹配...后面的位置。负后顾 (?!...)匹配不在...后面的位置。
lookahead re.search(r\d(?\D), 123abc)
if lookahead:print(Lookahead match:, lookahead.group(0))六、编译正则表达式
re.compile()
re.compile() 函数是 re 模块中的一个重要函数它用于将正则表达式的字符串形式编译成一个 Pattern 对象。预编译可以让你在后续的查找或匹配中重复使用该正则表达式而无需每次使用时都重新编译这样可以提高效率。
import re# 将正则表达式编译成Pattern对象
pattern re.compile(r\d) # 匹配一个或多个数字# 使用Pattern对象进行匹配
match_result pattern.match(123abc)
if match_result:print(match_result.group()) # 输出123search_result pattern.search(abc123def)
if search_result:print(search_result.group()) # 输出123# 使用Pattern对象查找所有匹配项
findall_result pattern.findall(123abc456def)
print(findall_result) # 输出[123, 456]# 使用Pattern对象进行迭代查找
for match in pattern.finditer(123abc456def):print(match.group()) # 输出123 然后 456# 使用Pattern对象替换字符串中的模式
sub_result pattern.sub(#, 123abc456def)
print(sub_result) # 输出#abc#defre.compile() 函数接受一个额外的标志参数 flags这些标志可以改变正则表达式的工作方式。例如
re.IGNORECASE 或 re.I忽略大小写。re.MULTILINE 或 re.M多行模式改变 ^ 和 $ 的行为。re.DOTALL 或 re.S使 . 匹配任何字符包括换行符。
例如如果我们想让正则表达式忽略大小写可以这样编译它
pattern re.compile(r[a-z], re.I)这个编译后的 Pattern 对象可以用来匹配任意字母序列不论大小写。 七、错误处理
使用re模块时可能会遇到re.error异常通常是因为正则表达式的语法错误。
try:re.search(r(\d, 123abc) # 缺少闭合的圆括号
except re.error as e:print(Regex error:, e)这个简介涵盖了Python中re模块的基本使用和主要功能。要精通正则表达式需要大量的练习和对复杂文本模式的理解。正则表达式是一个强大的工具但也需要谨慎使用因为复杂的表达式可能难以维护和理解。