正则表达式详解

一、正则表达式介绍

就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

注:本文以正则表达式在Python中的应用为例

二、普通字符和元字符

  1. 普通字符: 大多数字符和字母都会和自身匹配 。 如:re.findall(‘hello’,‘yuanaleSxhellowupeiqi’)
  2. 元字符: . ^ $ * + ? { } [ ] | ( ) \ 共11个

1.元字符之 .

通配符,与任意字符匹配

import re
 
ret=re.findall('a..in','helloalvin')
print(ret) #['alvin']

2.元字符之 ^ $

^表示从开头开始匹配,$表示从结尾开始匹配,二者联合使用表示从开头匹配到结尾。

^放在[]里表示取非

ret=re.findall('^a...n','alvinhelloawwwn')
print(ret)#['alvin']
 
 
ret=re.findall('a...n$','alvinhelloawwwn')
print(ret)#['awwwn']

3.元字符之 * + ? { }

均表示重复。注意: 前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

  • *:0-无穷次
  • +:1-无穷次
  • ?:0或1次
  • {}:{m, n} m到n次; {n} n次; {n, } n到无穷
ret=re.findall('abc*','abcccc')#贪婪匹配[0,+oo]  
print(ret)#['abcccc']
 
ret=re.findall('abc+','abccc')#[1,+oo]
print(ret)#['abccc']
 
ret=re.findall('abc?','abccc')#[0,1]
print(ret)#['abc']
 
 
ret=re.findall('abc{1,4}','abccc')
print(ret)#['abccc'] 贪婪匹配

4.元字符之[]

表示字符集

#字符集[]里的元字符为普通字符,没有功能,除了下面几个
ret=re.findall('a[bc]d','acd')
print(ret)#['acd']
 
ret=re.findall('[a-z]','acd')
print(ret)#['a', 'c', 'd']
 
ret=re.findall('[.*+]','a.cd+')
print(ret)#['.', '+']
 
#在字符集里有功能的符号: - ^ \
 
ret=re.findall('[1-9]','45dha3')
print(ret)#['4', '5', '3']
 
ret=re.findall('[^ab]','45bdha3')
print(ret)#['4', '5', 'd', 'h', '3']
 
ret=re.findall('[\d]','45bdha3')
print(ret)#['4', '5', '3']

5.元字符之 \

转义字符:

(1) 反斜杠后边跟元字符去除特殊功能,比如.

(2)反斜杠后边跟普通字符实现特殊功能,比如\d

\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ \t\n\r\f\v]。
\S 匹配任何非空白字符;它相当于类 [^ \t\n\r\f\v]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
\b 匹配一个特殊字符边界,比如空格 ,&,#等

注意:

(1)在编程中,第一层转义为语言本身的转义(如Python解释器,Java编译器),第二层为正则的转义

在这里插入图片描述

这就解释了为什么匹配 \,需要4个\,匹配数字,需要\\d,匹配字母数字, 需要\\w。

(2)Python中字符串前的r,就代表取消python解释器的转义。

6.元字符之 |

表示或

re.findall(r"ka|bc", "kaccbc") #['ka', 'bc']

7.元字符之 ()

分组

m = re.findall(r'(ad)+', 'add')
print(m)
 
ret=re.search('(?P<id>\d{2})/(?P<name>\w{3})','23/com')
print(ret.group())#23/com
print(ret.group('id'))#23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值