python学习笔记7-模式匹配与正则表达式

创建正则表达式

import re
phoneNumber = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

通过在字符串的第一个引号之前加上r,可以将该字符串标记为原始字符串,它不包括转义字符。

正则表达式

利用括号分组

phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo = phoneNumRegex.search('My number is 415-555-4242.')
mo.group(1) 415
mo.group(2) 555-4242
mo.group(0) 415-555-4242

mo.groups()返回多个值的元组,可以使用多重赋值的技巧,每个值赋给一个独立的变量

areaCode, mainNumber = mo.groups()

用[]括号匹配其中的一个字符

匹配方括号里面其中一个字符

用[^]括号匹配不在方括号内的任意字符

匹配不在方括号内的任意字符

用管道匹配多个分组

heroRgex = re.compile(r'Batman|Tina Fey')
mo1 = heroRegex.search('Batman and Tina Fey.)

只返回第一次出现的匹配文本,不是两个都显示出来

用问号实现可选匹配

字符?表明它前面的分组(分组使用使用小括号括起来)在这个模式中是可选的,可以存着也可以不存在

batRegex = re.compile(r'Bat(wo)?man')
mo1 = batRegex.search('The Adventures of Batman')
mo1.group() 'Batman'

上面的例子中就是wo是可选的分组,wo将出现零次或一次。

用星号匹配零次或多次

字符*表明它前面的分组可以完全不存在,或一次又一次地重复

batRegex = re.compile(r'Bat(wo)*man')
mo1 = batRegex.search('The Adventures of Batwowoman')
mo1.group() 'Batwowoman'

上面的例子中就是wo是可选的分组,wo将出现零次或任意多次。

用加号匹配一次或多次

字符+表明它前面的分组至少匹配一次

batRegex = re.compile(r'Bat(wo)+man')
mo1 = batRegex.search('The Adventures of Batman')
mo1 == None True

上面的例子中就是wo最少匹配一次

用花括号匹配特定次数

匹配一个分组特定次数

  • (Ha){3} 匹配3次
  • (Ha){3,} 匹配3次或更多次数
  • (Ha){,5} 匹配0到5次

正则表达式里的贪心和非贪心模式

正则表达式的原则是匹配的越多越好(贪心模式),非贪心模式在模式后面加个?号

nongreedyHaRegex = re.compile(r'(Ha){3,5}?')
mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
mo2.group() 'HaHaHa'

findall()

返回一组字符串,包括被查找字符串中的所有匹配

phoneNumber = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
phoneNumber.findall('Cell: 415-555-999 Work:212-555-0000')
['415-555-999','212-555-0000']

如果在正则表达式中有分组,那么findall将返回元组的列表。每个元组表示一个找到的匹配,其中的项就是正则表达式中每一个分组的匹配字符串。

phoneNumber = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)')
phoneNumber.findall('Cell:415-555-9999 Work:212-555-0000')
[('415','555','9999'),('212','555','0000')]

插入字符和美元字符

^表示必须以什么为开始,$表示必须以什么为结束

字符分类

常用字符分类的缩写代码

缩写字符分类表示
\d0到9的任何数字
\D除0到9的数字以外的任何字符
\w任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
\W除字母、数字和下划线以外的任何字符
\s空格、制表符或换行符(可以理解为匹配“空白”字符
\S除空格、制表符和换行符以外的任何字符

通配字符

.(句号)字符称为“通配符”。匹配了换行之外的所有字符,只匹配一个字符

  • .*匹配所有字符
  • .+匹配除了空之外的所有字符

re.compile()的参数

  • re.DOTALL 可以让.*匹配包括换行符的所有字符
  • re.I或re.IGNORECASE 可以不区分大小写
  • re.VERBOSE 可以将正则表达式分行,并可以注释

用sub()方法替换字符串

第一个参数是取代发现的匹配,第二个参数是要操作取代的字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值