正则表达式1-2-3

1.5之后增加了re模块,提供了正则表达式

re模块使python语言拥有了全部的表达式功能

import re # -------------re模块-------------

------------------re.match 函数-----------------------

原型:match(pattern, string, flags=0)

pattern:匹配的正则表达式

string: 要匹配的字符串

flags:标志位,用于控制正则表达式的匹配模式

常用前三个:

re.I 忽略大小写

re.S 匹配所有包括换行符在内的所有字符

re.M 多行匹配,影响^和$

# re.L 做本地识别

# re.U 根据Unicode字符集解析字符 影响\w \W \b \B

# re.X 更灵活的格式理解正则表达式

功能: 尝试从字符串起始位置匹配一个模式,如果不是起始位置匹配

成功的话,返回None

www.baidu.com

a = re.match(‘www’, ‘www.baidu.com’)
a1 = re.match(‘wwW’, ‘wwW.baidu.com’, flags=re.I) # 忽略大小写
a2 = re.match(‘www’, ‘www.baidu.com’).span() # 只打印位置
print(a)
print(a1)
print(a2)

#----------------------re.search函数-------------------------

re.search函数

原型:search(pattern, string, flags=0)

参数:

pattern:匹配的正则表达式

string:匹配的字符串

flags:标志位,用于控制正则表达式的匹配模式

功能:扫描整个字符串,并返回第一个成功匹配

Summer is a good man is good summer man

a = re.search(‘summer’, ‘Summer is a good man is good summer man’)
a1 = re.search(‘summer’, ‘Summer is a good man is good summer man’, flags=re.I)
print(a)
print(a1)

re.findall函数

原型:findall(pattern, string, flags=0)

参数:

pattern:匹配的正则表达式

string:匹配的字符串

flags:标志位,用于控制正则表达式的匹配模式

功能:扫描整个字符串,

d = re.findall(‘summer’, ‘Summer is a good man is good summer man’, flags=re.I)
print(d)

import re
print(’----------匹配单个字符与数字-----------’)

换行符除换行符以外的任意字符

[0123456789]

a = re.search(’[0123456789]’, ‘summer is a good man 6’)
a1 = re.search(’.’, ‘summer is a good man 6’)
print(a)
print(a1)

[a-z] 匹配任意小写字母

[A-Z] 匹配任意大写字母

[0-9] 匹配任意数字

[0-9a-zA-Z] 匹配任意数字和字母

[0-9a-zA-Z_] 匹配任意数字,字母和下划线

[^0-9] 匹配所有的非数字字符

print(’---------------------单字符------------------------’)

\d 匹配所有的数字

\D 匹配非数字字符

\w 匹配数字,字母和下划线

\W 匹配非数字、字母下划线

\s 匹配任意的空白符(空格、换行、回车、换页、制表)

\S 匹配任意的非空白符

c = re.findall(’\d’,‘sasas4sas7a4s4a4’)
print©

print(’-----------------锚字符(边界字符)---------------------’)

^ 行首匹配,和[^]里的不是一个意思

$ 行尾匹配

\A 匹配字符串开始,和^区别是,\A只匹配整个字符串的开头

\Z 匹配字符串结束,和^区别是,\A只匹配整个字符串的结束

\b 匹配一个单词的边界,值单词和空格间的位置

\B 匹配非单词边界

print(re.findall(’^summer’, ‘summer is a good man\nsummer is a good nice man’,re.M))
print(re.findall(‘man$’, ‘summer is a good man’))

print(re.findall(’\Asummer’,‘summer is a good man\nsummer is a good nice man’))
print(re.findall(‘summer\Z’,‘summer is a good man\nsummer is a good nice man’))

print(’--------------匹配多个字符--------------------’)

(xyz) 匹配小括号内的xyz(作为一个整体去匹配)

x? 匹配0或1个x

x* 匹配0或任意多个x(.*表示匹配0个或任意多个字符)

x+ 匹配至少一个x

x{n} 匹配确定的n个x(n是一个非负整数)

x{n,} 匹配至少n个x

x{n,m} 匹配至少n个最多m个 注意:n <= m

x|y

print(re.findall(r’a?’, ‘aaaaaa’)) # 一个一个匹配
print(re.findall(r’a*’, ‘aaabmaaa’)) # 多个匹配
print(re.findall(r’a+’, ‘aaaaaabaaaaa’))
print(re.findall(r’a{3}’, ‘aaabaa’))
print(re.findall(r’a{3,}’, ‘aaaaaaabaaaaa’))
print(re.findall(r’a{3,6}’, ‘aaaaaaa’))
print(re.findall(r’((a|A)line)’, ‘aline–Aline’))

提取sunck …man

str = ‘sunck is a good man is a nice man!sunck is a very handsome man’
print(re.findall(r’^sunck(.*?)man$’, str))

print(’----------------特殊--------------------’)

*? +? (xyz)? 最小匹配 通常都是尽可能多的模式,可以使用这种解决贪婪匹配

(?:x)

print(re.findall(r’//.?//’))

p = r’^1[34578]\d{9}$’
str = ‘13754698742’
p1 = re.findall(p, str)
print(p1)

import re

切割字符串

str1 = ‘summer is a good man’
print(re.split(r’ +’, str1)) # 至少一个空格

-------re.finditer 函数---------

原型:findall(pattern, string, flags=0)

参数:

pattern:匹配的正则表达式

string:匹配的字符串

flags:标志位,用于控制正则表达式的匹配模式

功能:扫描整个字符串,返回的是一个迭代器

str2 = ‘summer is a good man is a nice man!summer is a nice man summer is a good’
a = re.finditer(r’summer’,str2)
while True:
try:
p = next(a)
print(a)
except StopIteration as f:
break

字符串的替换和修改

sub(pattern, repl, string, count=0, flags=0)

subn(pattern, repl, string, count=0, flags=0)

pattern:正则表达式

repl:指定的用来替换的字符串

string:目标字符串

count:最多替换次数

flags:re.I等…

功能:在目标字符串中以正则表达式的规则匹配字符串,在吧他们替换成指定的字符串

可以指定替换的次数,不指定提花你所有的字符串

区别

str3 = ‘summer is a good good good man’
print(re.sub(r’(good)’, ‘nice’, str3, count=2)) # 返回值是字符串类型

re.subn() # 返回值是元祖类型 与sub一样 只不过是返回值类型不同

分组

概念:除了简单的判断是否匹配之外,正表达式还有提取子串得我功能

用(一组)表示就是分组

str4 = ‘010-12345689’
m = re.match(r’((\d{3})-(\d{8}))’, str4)
print(m.group(0)) # 0代表的是字符串本身
print(m.group(1))
print(m.group(2)) # 表达式里面有几个括号就只能分几组
print(m.group(3))

查看匹配的各组的情况

print(m.groups())

编译

compile(pattern,flags=0)

pattern:

模块调用

对象调用

re_qq = re.compile(r’1\d{5,9}$’)
print(re_qq.search(‘4568158462’))


  1. 1-9 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式是一种用于匹配、查找和替换文本的强大工具。它由一系列字符和特殊字符组成,可以用来描述字符串的模式。以下是正则表达式的介绍: 1. 字符匹配:正则表达式可以用来匹配指定的字符。例如,表达式 "abc" 可以匹配字符串中连续出现的 "abc"。 2. 字符类:使用方括号 [] 可以定义一个字符类,表示匹配其中任意一个字符。例如,表达式 "[abc]" 可以匹配字符串中的 "a"、"b" 或 "c"。 3. 量词:使用量词可以指定匹配字符的数量。例如,"*" 表示匹配前面的字符零次或多次,"+" 表示匹配一次或多次,"?" 表示匹配零次或一次。 4. 特殊字符正则表达式中有一些特殊字符具有特殊的含义,如 "." 表示匹配任意字符,"\d" 表示匹配数字,"\w" 表示匹配字母、数字或下划线等。 5. 边界匹配:使用 "^" 表示匹配字符串的开头,"$" 表示匹配字符串的结尾。例如,表达式 "^abc$" 只能匹配整个字符串为 "abc" 的情况。 6. 分组和引用:使用小括号 () 可以将一部分正则表达式进行分组,并且可以在后续的表达式中引用。例如,表达式 "(ab)+\1" 可以匹配 "abab"。 7. 转义字符:使用反斜杠 \ 可以对特殊字符进行转义,使其失去特殊含义。例如,表达式 "\." 可以匹配字符串中的点号。 8. 替换:正则表达式不仅可以用于匹配,还可以用于替换。通过使用替换符号和替换字符串,可以将匹配到的部分替换为指定的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值