python正则表达式详解
时间: 2023-10-18 14:01:51 浏览: 143
正则表达式是一种匹配文本的工具,可以用于搜索、替换和验证字符串。Python中内置了re模块,用于处理正则表达式。下面详细介绍Python中正则表达式的语法和用法。
1. 基本语法
正则表达式是由一系列字符和元字符组成的模式,用来描述字符串的特征。下面是一些基本的正则表达式元字符:
- . 匹配任意字符
- [] 匹配中括号内任意一个字符
- ^ 匹配行首
- $ 匹配行尾
- * 匹配前面的字符0次或多次
- + 匹配前面的字符1次或多次
- ? 匹配前面的字符0次或1次
- {n} 匹配前面的字符n次
- {n,m} 匹配前面的字符n到m次
例如,正则表达式r'hello'可以匹配字符串中的hello字符串。
2. re模块的常用函数
re模块提供了一些常用的函数来处理正则表达式:
- re.match() 函数从字符串的开头匹配正则表达式
- re.search() 函数在字符串中搜索正则表达式的第一次出现
- re.findall() 函数返回字符串中所有匹配正则表达式的子串列表
- re.sub() 函数用于将字符串中匹配正则表达式的子串替换为指定的字符串
例如,可以使用re.match()函数来匹配字符串开头的hello字符串:
```
import re
s = 'hello world'
if re.match(r'hello', s):
print('Matched')
else:
print('Not matched')
```
3. 分组和捕获
正则表达式支持使用小括号来分组和捕获匹配的子串。使用小括号括起来的正则表达式被称为捕获组,可以使用re.match()或re.search()函数返回的Match对象的group()方法获取捕获组匹配的子串。
例如,可以使用捕获组匹配字符串中的数字和字母:
```
import re
s = '123abc456'
m = re.search(r'(\d+)([a-z]+)(\d+)', s)
if m:
print(m.group(0)) # 123abc456
print(m.group(1)) # 123
print(m.group(2)) # abc
print(m.group(3)) # 456
```
4. 零宽断言
零宽度断言是一种特殊的正则表达式,用于匹配字符串的位置,而不是字符。它可以匹配一个位置前面或后面的字符串,但不包括这个字符串本身。零宽度断言包括正向预测先行断言(positive lookahead assertion)、正向回顾后发断言(positive lookbehind assertion)、负向预测先行断言(negative lookahead assertion)和负向回顾后发断言(negative lookbehind assertion)。
例如,可以使用正向预测先行断言匹配一个字符串中的数字,但不包括小数点:
```
import re
s = '123.456'
m = re.search(r'\d+(?=\.)', s)
if m:
print(m.group()) # 123
```
5. Unicode支持
Python的re模块支持Unicode字符集,可以使用\p和\P进行匹配和排除Unicode字符集。例如,可以使用\p{Han}匹配汉字字符:
```
import re
s = '汉字'
m = re.search(r'\p{Han}+', s)
if m:
print(m.group()) # 汉字
```
6. 总结
正则表达式是一种强大的文本处理工具,可以用于搜索、替换和验证字符串。Python中内置了re模块,提供了处理正则表达式的函数和方法。正则表达式的语法和用法需要不断练习和实践才能熟练掌握。
阅读全文