python知识点------正则表达式

1、正则表达式的定义

定义:正则表达式是一个特殊的字符序列,可以判断一个字符串内是否与我们所设定的字符序列相匹配。

模块:python内部的re 模块拥有全部的正则表达式功能,可以直接调用来实现正则匹配。

实现的原理:正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

例:判断字符串内是否含有Python

使用re.findall("匹配规则", "要匹配的字符串"),实现匹配确认。

import re
a = 'C|C++|Java|C#|Python|Javascript'

r = re.findall("Python", a)
print(r)
#规则
if len(r) > 0 :
    print("字符串中包含Python")
else :
    print("No")

2、元字符与普通字符

正则式的匹配规则可以使用元字符与普通字符来进行设定。

普通字符:如"Python"

元字符:如抽象符号\d:匹配一个数字字符,等价于[0-9]

例:查找出字符串内0-9的数字

import re
a = 'C0C++8Java9C#55Python76Javascript'

r = re.findall("\d", a)
print(r)

3、字符集

字符集:可使用[]将需要匹配的字符同时添加进去。如下例字符集:a[cf]c,可同时匹配acc、afc

import re
a = 'abc, acc, adc, aec, afc, ahc'

r = re.findall("a[cf]c", a)
print(r)

4、概括字符集

字符集或概括字符集都只能匹配一个单一字符。

\d是0-9数字字符

\D是非0-9的字符,等价于^\d

\w是单词字符(数字、字母)

\s是空白字符(' ','\t','\n', '\r'等)

. 匹配除换行符\n之外的其他所有字符

5、数量词

{3}:匹配3个字符。如[a-z]{3}:匹配3个字符,字符为a-z

{3,6}:匹配3-6个字符。

6、贪婪与非贪婪

贪婪:尽可能匹配更多

非贪婪:在匹配字符串后面加?。如[a-z]{3, 6}?

7、匹配0次1次或者无限多次

*:表示匹配0次或者无限多次

+:表示匹配1次或者无限多次

如'Python*':(表示最后一个字符n可以匹配0或无限次),输出结果为pytho, python, pythonn

如'Python+':(表示最后一个字符n可以匹配1或无限次),输出结果为python, pythonn

import re
a = 'pytho0Python1Javascriptpythonn2'

r = re.findall("Python*", a)
print(r)

8、边界匹配符

边界符号:^, $。如^\d{4, 8}$

^:最前面的字符必须为\d

$:最后面的字符必须为\d

# 边界匹配
import re
qq = '123456789'
# 4~8
# ^表示左边界的字符匹配
# $表示有边界的字符匹配
r = re.findall("^\d{4, 8}$", qq)
print(r)

如000$:表示最后面的3个字符必须是000

9、字符组的重复匹配

如(python){3}:表示匹配的字符是pythonpythonpython,即将python合并成组,然后匹配3个组

匹配的字符可以不止一个组,如(python){3}(JS)

区别:[abc]:表示a或b或c,里面是或的关系

            (abc):表示abc,里面是成组,成块的。

10、匹配模式参数

re.findall():第3个参数就是描述匹配模式,如re.I表示忽略字母大小写

第3个参数可以设置多个匹配模式,使用|连接。如re.I | re.S

re.S表示   .  可以描述所有字符

import re
language = 'pythonC#\nJavaPHP'
# re.I 忽略字符的大小写
# re.S 表示.可以描述所有字符(包含\n)
r = re.findall("c#.{1}", language, re.I | re.S)
print(r)

11、字符串替换

re.sub,字符串替换,类似replace函数

import re
language = 'pythonC#JavaC#PHPC#'
# 替换字符串
# r = re.sub('C#', 'GO', language, 2)
a = language.replace('C#', 'GO', 2)
print(language)
print(a)

12、动态替换

 使用convert函数作为re.sub的参数,来进行动态替换字符串

import re
language = 'pythonC#JavaC#PHPC#'


# 定义一个convert函数,进行动态替换字符串
def convert(value):
    matched = value.group()
    return '!!' + matched + '!!'


r = re.sub('C#', convert, language)
print(r)

输出结果:python!!C#!!Java!!C#!!PHP!!C#!!

import re
s = 'A8C3721D86'


# 定义一个convert函数,进行动态替换字符串
def convert(value):
    matched = value.group()
    if int(matched) >= 6:
        return '9'
    else:
        return '0'


r = re.sub('\d', convert, s)
print(r)

输出结果:A9C0900D99

13、re.match与re.search

import re
s = 'A8C3721D86'

r1 = re.match('\d', s)
r2 = re.search('\d', s)
print(r1)
print(r2)
print(r2.group())
print(r2.span())

输出结果:

None
<re.Match object; span=(1, 2), match='8'>
8
(1, 2)

区别:match是尝试从字符串首字母处开始查找是否匹配,如果不匹配则返回None。search是尝试搜索整个字符串,如果有匹配的,则返回相关结果。如果首字母就匹配,那么match和search功能基本差不多。

14、group分组

import re
s = 'life is short, i use python'

r = re.search('life(.*)python', s)
# 0返回完整匹配结果
print(r.group(0))
# 1返回分组内的匹配结果
print(r.group(1))

输出结果:

life is short, i use python
 is short, i use 

注意:group(1)表示第一个组块。

groups():表示所有组块。

15、常用正则表达式

为了学习,可以有意识的多使用正则表达式,建议多分析网络上已经写好的常用正则表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值