python与正则:前后向断言、分组,以及案例练习
向前向后断言
import retext1 = 'hello World zhangsan'# ?=\s 向前断言,检查后面内容是否满足
pattern1 = r'\w+(?=\s)'alist = re.findall(pattern1, text1)
print(alist)print('-' * 30)
# 检查要求前面有一个空格
text2 = ' Hello world'
pattern2 = r'(?<=\s)\w+'
alist2 = re.findall(pattern2, text2)
print(alist2)
执行结果
正则中的分组与捕获以及反向引用
正则表达式不仅可以用于简单的模式匹配,还可以通过分组、断言等方式,处理更加复杂的文本。
- 分组
我们可以使用圆括号组成一个比较复杂的匹配模式。那么一个圆括号的部分我们可以看作是一个子表达式/一个分组 - 捕获
把正则表达式中子表达式/分组的内容,保存在内存中以数字编号或显示命名的组里,方便使用,从左向右,以分组的左括号为标志,第一个出现的分组的组号是1,第二个是2,以此类推,组0代表的是整个正则 - 反向引用
圆括号的内容被捕获以后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这种引用既可以是在正则表达式内部,也可以是正则表达式外部。内部反向引用用\分组号,外部反向引用用$分组号
import retext = '123-4567-8910'pattern = r'(\d{3})-(\d{4})-(\d{4})'result = re.search(pattern, text)# group()或者group(0)都代表获取匹配到的全部内容
print(result.group())
print(result.group(0))
# group分组的编号是从1开始的,不是从0开始的
print(result.group(1))
print(result.group(2))
print(result.group(3))
执行结果是