正则表达式

一.什么是正则:

1.根据指定规则从字符串中提取子字符串

2.指定规则:正则表达式

3.字符串:待匹配字符串

子字符串:匹配结果

4.注意:正则并不是python独有的,各种语言都可以使用正则

二.正则表达式应用场景

1.表单验证(手机号验证,账号验证,密码验证)

2.爬虫

3.其他

正则表达式的语法:

1.元字符:可以匹配一个的符号

  • ():匹配任意字符,换行除外\n
  • []:一个特殊的的字符组如下:
    • [a-z]:a到z的任意小写字母
    • [A-Z]:A到Z的任意大写字母
    • [0-9]:0到9的任意数字
  • \d:匹配任意数字
  • \D:匹配非数字
  • \s:匹配空白符
  • \S:pp非空白符
  • \w:匹配数字字母下划线
  • \W:匹配非数字字母下划线
  • ^:以什么开头
  • $:以什么结果

2.量词:匹配字符的数量

  •  *:匹配多个或无数个
  • +:匹配1个或者无数个
  • ?:匹配哟个或者无数个
  • {m}:匹配m个
  • {m,n}:匹配m个到n个
  • {m,}:最少匹配m个
  • {,n}:匹配最多n个

3.贪婪匹配和非贪婪匹配

  • 贪婪匹配是指在正则匹配的过程中尽量往多了匹配,正则表达式默认往多了匹配
  • 非贪婪匹配是指一旦满足了正则表达式,就将匹配到的作为一个结果,然后向后匹配,直到找出不满足的结果为止,换言之,就是一个字符串尽量少了匹配,非贪婪匹配就要在两次后边使用?进行修饰

4.分组与或

4.1分组

  • 分组:是在正则表达式中使用()将正则表达式的一部分括起来表示一部分
  • 作用:
    • 改变优先级
    • 分组引用
    • 分组捕获

4.2或的使用

  • 或:用"|"分割的正则表达式,代表按照|两边的正则表达式进行匹配行
  • 示例:abc(\d|def)
    • 正则表达式前面的abc是固定的,必须匹配abc三个字母,abc后面()表示任意匹配,()中的\d和def分别满足表达式,比如按照上面的正则表达式对"abc789---abcdef999"的匹配结果为abc789和abcdef

5.使用re模块实现正则表达式操作

  • match():match(0用于从字符串的开始处开始进行匹配,如果在起始位置匹配成功,则返回Match对象,否则返回None,即当匹配到第一个结果后就直接返回,不再进行匹配,同理,匹配的第一个字母不符合条件时,则返回None,s语法格式如下:re.match(pattern,string,[flags])
    • 参数说明:
      • pattern:表示模式字符串,由要匹配的正则表达式转换而来
      • string:表示要匹配多的字符串
      • flags:可选的参数,表示标志位,用于控制匹方式  
    • 常用标志:
      • A或者ASCII :对于\w, \W, \b, \B, \d ,\D, \s和\S  只进行 ASCII匹配(仅仅适用于Python 3.x)
      • I 或者IGNORECASE :执行不区分字母大小写的匹配
      • S或DOTALL:使用(.)字符怕所有字符,包括换行符
      • X或VERBOSE:忽略模式字符串中未转义的空格和注释
      • 例如:匹配字符串是否以“mr_”开头,不区分字母大小写,代码如下    
import re                               
pattern = r'mr_\w+'                    # 模式字符串
string = 'MR_SHOP mr_shop'             # 要匹配的字符串
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果

string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果


执行结果如下:
<_sre.SRE_Match object; span(0,7),match='MR_SHOP'>           # span为匹配的起始位置

None
  •  search()方法用于再整个字符串中搜索第一个匹配的值,如果匹配成功,则返回match对象,否则返回None,search()方法不仅仅是再字符串的起始位置搜索,如其他位置有符合的匹配也可以进行搜索,search()方法的语法格式如下:re.search(pattern,string,[flags])
    • 参数说明:
      • pattern:表示模式字符串,有要匹配的正则表达式转化而来
      • string:表示要匹配的字符串
      • flags;可选参数,表示标志位,用于控制匹配方式
    • 例子:搜索一个以“mr_”开头的字符串,不区分字母大小写:
import re                               
pattern = r'mr_\w+'                    # 模式字符串
string = 'MR_SHOP mr_shop'             # 要匹配的字符串
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果

string = '项目名称MR_SHOP mr_shop'
match = re.match(pattern,string,re.I)  # 匹配字符串,不区分大小写
print(match)                           # 输出匹配结果


执行结果如下:

<_sre.SRE_MATCH object;span(0,7),match='MR_SHOP'>
<_sre.SRE_MATCH object;span(4,11),match='MR_SHOP'>     # span为匹配的起始位置

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值