(学习笔记)python中正则表达式常用知识

原子:原子是表达式的最小组成单位,它可以是普通字符,非打印字符(如换行,制表等),通用字符等

对于普通字符,输入一个字符串,如pat="csdn",在匹配时会把它作为四个原子'c','s','d','n'

举例:
import re  //正则表达式的相关内容位于re模块内
pat1='csdn'
str1='wasdcsdnss'
result=re.search(pat1,str1)
print(result)
//如果输出正确,shell会提示<sre.SRE_Match object;span=(4,8),match='csdn'>
//span(m,n)内的数字表示匹配到的字符串的位置,从0开始计数,包含m,不包含n

非打印字符对应的表达式写法如下:

\n  匹配一个换行符
\t  匹配一个制表符

通用字符:

此类原子在使用时可以匹配一类字符,常用字符如下:

\w 匹配任意一个字母,数字或下划线     \W 匹配除字母,数字和西下划线以外所有字符
\d 匹配任意一个十进制数   \D 匹配除过十进制数以外任意字符
\s 匹配任意空白字符  \S  匹配任意一个非空白字符

py中正则表达式区分大小写,大写的字母可以表达相反的含义

元字符

具有特殊功能的字符,在正则表达式中他们可以用于填充字符串,表达不同的含义

^  匹配字符串的开始位置
$  匹配字符串的结束位置
? 匹配重复一次或零次的字符
+  匹配重复一次或多次的字符
*  匹配重复一次,零次或多次的字符
.  匹配除换行符以外的任意字符
{n}  匹配括号前的字符正好出现了n次
{n,} 匹配括号前的字符至少出现了n次
{n,m} 匹配括号前字符至少出现了n次,最多出出现m次

举例:ast="p*y",这个正则表达式在匹配时表示匹配开头为p,结尾为y,中间有几个字符无法确定的字符串
ast2="^abc",这个正则表达式匹配限制要求开头是abc
ast3="$py",这个字符串匹配要求末尾时py

模式选择符

"|"。效果如同“或”,在匹配时只要有表达式其中一项即可匹配。如:"python|php"。无论遇到python还是php均正确。

模式修正符

功能:在不改变表达式的基础上改变其含义,意思就是说表达式本身没有被改变,但在匹配时修改了匹配规则。

I  让表达式不再区分大小写
M(Multline)  多行匹配。将字符串视为多行,不管要被匹配的字符串中间有几个回车都可以匹配出来
S 使用后'.'字符也可以匹配换行符
U  根据unicode进行匹配

使用方法:例  re.research(pat,str,I/U/M)

举例:

import re
pat1="python"
pat2="python"
str="wckwbcphpwccPython"
result1=re.search(pat1,str,re.I)//注意是re.I
result2=re.search(pat2,str)
print(result1)
print(result2)

对于这个程序,输出的结果为:

<_sre.SRE_Match object; span=(12, 18), match='Python'>
None
说明使用re.I后表达式就可以匹配到对应的大写字符了

贪婪模式与懒惰模式

总的来说,贪婪模式是在满足条件的情况下尽可能地多匹配到字符串,懒惰模式则是尽可能地少匹配。

举例:edepycwcycwccwy,在这个字符串中有三个y
使用"p.*y"这个表达式可以一直匹配到最后一个y
使用“p.*?y”这个表达式只匹配到“py”这个字符串

常用函数

re.match(pattern,str,flag)
该函数功能为从待匹配字符串开头开始匹配
re.search(pattern,str,flag)
扫描整个字符串来寻找匹配
re.compile()
找出所有符合模式的内容
举例:
str='hellomyyespythonokpythonmypython'
pat=re.compile('.python.')
result=pat.findall()
print(result)
该程序会找出所有符合的结果并用中括号包括
re.sub(pat,rep,str,max)
rep表示要用来替换的字符串,max表示替换次数,不写则为全部替换
附:“[a-zA-Z]+://[^'s]*[.com|.cn]”可以匹配出http://。。。。格式的网址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值