python之正则表达式回顾
分组
分组–符号: ()
特点
- 将括号中的内容看成一个整体
- 捕获()内容 使用带括号的正则表达式匹配成功后,只获取括号中的内容
- 重复 可以通过 \数字 来重复前面()中匹配到的结果。数字代表前第几个分组
#组合
import re
# 匹配一个字符串
re_str =r'(\d.*?[a-zA-Z]){2}'
str_test ="1sacas1asas1sa2ass"
print(re.findall(re_str,str_test))
# 捕获
re_str =r'(\d[a-z].*?\d)'
str_test ="1sacas1asas1sa2ass"
print(re.findall(re_str,str_test))
# 重复
re_str =r'([a-z]{3})-(\d{3})\1'
# \1 是重复第一个组的字符(必须一模一样)
str_test ="cas-154cas"
print(re.findall(re_str,str_test))
print(re.fullmatch(re_str,str_test))
结果:
[‘1a’, ‘2a’]
[‘1sacas1’, ‘1sa2’]
[(‘cas’, ‘154’)]
<re.Match object; span=(0, 10), match=‘cas-154cas’>
括号
[] (匹配中括号中出现的任意一个字符)
[字符集] 匹配一个字符,这字符是字符集中的任意一个字符
[字符1-字符2]
匹配一个字符,这个字符是Unicode编码值在字符1到字符2中的任意一个字符;字符1的编码值要小于字符2
例如:
[1-9] 数字1到9
[a-z] 小写字母
[A-Z] 大写字母
[\u0031-\u0039] --> 数字1到9
[\u4E00-\u9fa5] --> 匹配所有的汉字
注意:- 字符在中括号中,如果放在两个字符之间表示范围。
fullmatch和match
fullmatch(pattern正则表达式字符串, str字符串)
用正则表达式去完全匹配字符串(匹配整个字符串),返回匹配对象(re.Match object)或者None
match(pattern正则表达式字符串, str字符串)
匹配字符串开头,返回匹配对象或者None
findall
findall(pattern正则表达式字符串, str字符串)
获取字符串中满足正则表达式的所有的子串,返回一个列表。
如果正在表达式中有分组,只返回分组中匹配到的结果;
如果有多个分组,则将每个分组匹配到的结果返回到一个元祖中
sapn
span(group=0)
获取匹配成功的区间(左闭右开区间)
re_str =r'([a-z]{3})-(\d{3})\1'
# \1 是重复第一个组的字符(必须一模一样)
str_test ="cas-154cas"
print(re.findall(re_str,str_test))
print(re.fullmatch(re_str,str_test))
result = re.fullmatch(re_str,str_test)
print(type(result))
print(result.span())
print(result.start()) # 获取匹配到的开始下标
print(result.end()) # 获取匹配到的结束下标后的下标
结果:
<re.Match object; span=(0, 10), match=‘cas-154cas’>
[(‘cas’, ‘154’)]
<class ‘re.Match’>
(0, 10)0
10
group
group(group = 0) 获取完全匹配结果
group(index>0) 获取正则表达式中第index个分组匹配到的结果
re_str =r'([a-z]{3})-(\d{3})\1'
# \1 是重复第一个组的字符(必须一模一样)
str_test ="cas-154cas"
result = re.fullmatch(re_str,str_test)
print(result.group())#获取完全匹配结果
print(result.group(0))#获取完全匹配结果
print(result.group(1))#获取第1个分组的
print(result.group(2))#获取第2个分组的
结果:
cas-154cas
cas-154cas
cas
154
string
获取被匹配的原字符串
re_str =r'([a-z]{3})-(\d{3})\1'
# \1 是重复第一个组的字符(必须一模一样)
str_test ="cas-154cas"
result = re.fullmatch(re_str,str_test)
print(result.group())#获取完全匹配结果
print(result.group(0))#获取完全匹配结果
print(result.group(1))#获取第1个分组的
print(result.group(2))#获取第2个分组的
print("返回原字符串:",result.string)
结果:
cas-154cas
cas-154cas
cas
154
返回原字符串: cas-154cas
search
search(pattern正则表达式字符串, str字符串)
查找字符串中满足正则表达式的第一个字符串,返回值是匹配对象(re.Match object)或者None。
re_str =r'(\d[a-z].*?\d)'
str_test ="1sacas1asas1sa2ass"
print(re.search(re_str,str_test))
结果:
<re.Match object; span=(0, 7), match=‘1sacas1’>