python学习之 re库 正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

python 通过re模块实现

re.search()方法用于在字符串中搜索正则表达式模式第一次出现的位置
搜素不存在的字符串,返回None,

import re
re.search("dawn","dawn likes python")
#<re.Match object; span=(0, 4), match='dawn'>
re.search("yn","dawn likes python")

'.'号,可以匹配除了换行符之外的任何字符

re.search(r'.',"dawn likes python")
<re.Match object; span=(0, 1), match='d'>
re.search(r'py.hon',"dawn likes python")  
<re.Match object; span=(11, 17), match='python'>
re.search(r'\.',"dawn likes. python")     #找 点字符
<re.Match object; span=(10, 11), match='.'>

‘\d’,可以匹配任何数字

re.search(r'\d',"dawn likes 134  python") 
<re.Match object; span=(11, 12), match='1'>
>>> re.search(r'\d',"dawn likes 1.6  python") 
<re.Match object; span=(11, 12), match='1'>
>>> re.search(r'\d\d',"dawn likes 1.4  python")   #无返回结果
>>> re.search(r'\d\d\d',"dawn likes 1.4  python") #无返回结果
#测试
>>> re.search(r'\d\.\d',"dawn likes 1.4  python")  
<re.Match object; span=(11, 14), match='1.4'>
>>> re.search(r'\d.\d',"dawn likes 1.4  python")   
<re.Match object; span=(11, 14), match='1.4'>
>>> re.search(r'\d..',"dawn likes 1.4  python")    
<re.Match object; span=(11, 14), match='1.4'>
>>> re.search(r'..\d',"dawn likes 1.4  python")    
<re.Match object; span=(9, 12), match='s 1'>
>>> re.search(r'.\..',"dawn likes 1.4  python")    
<re.Match object; span=(11, 14), match='1.4'>

[]:由一对方括号括起来的字符,表明一个字符集合,能够匹配包含在其中的任意一个字符。’-‘ 减号来指定一个字符集合的范围。例子:[a-z] ,[2-9] . (默认情况下是区分大小写的)
[0-255]==[01255],一定注意这是字符集合,所以数字范围为0-9

{m} 精确匹配m次
{m,n} 匹配最少m次,最多n次。(n>m) 指定最少3次:{3,} 最大为5次:{,5}

re.search('ab{3}c','aabbbc')
#<re.Match object; span=(1, 6), match='abbbc'>
re.search('ab{1,10}c','aabbbbbc') 
#<re.Match object; span=(1, 8), match='abbbbbc'>

^:匹配除去所列首个字符外的所有字符; ^\d表示必须以数字开头。
KaTeX parse error: Undefined control sequence: \d at position 14: :匹配字符串的尾部字符 \̲d̲表示必须以数字结束

’+ ‘1次或多次匹配 表示匹配前面的规则至少1次,可以多次匹配
’* ‘ 0或多次匹配
’? ‘ 0或1次匹配 只匹配前面的规则0次或1次

\s 匹配间隔符 即匹配空格符、制表符、回车符等表示分隔意义的字符,它等价于[ \t\r\n\f\v]
\b’ 匹配单词边界 它匹配一个单词的边界,比如空格等,不过它是一个‘0’长度字符,它匹配完的字符串不会包括那个分界的字符。
而如果用’\s’来匹配的话,则匹配出的字符串中会包含那个分界符

re.search(r'dawn\s','dawn dawnmdawn')  #有空格
<re.Match object; span=(0, 5), match='dawn '>
re.search(r'dawn\b','dawndawnmdawn') 
<re.Match object; span=(9, 13), match='dawn'>

"^"出现在[]的第一个字符位置,就代表取反,例如[ ^ab0-9]表示不是a、b,也不是0-9的数字.
\w 匹配字母和数字 匹配基本所有语言的字符 开启re.ASCII标志即等价于[a-zA-Z0-9]。 \W 等价 [ ^a-zA-Z0-9]

使用括号(…)可以把(…)看出一个整体,经常与"+"、"*"、"?"的连续使用,对(…)部分进行重复.

'\数字’ ascii对应的字符

findall()函数,找到所有,匹配的字符串,打包成列表返回

’ * ?’ ‘ +?’ ‘??’ 最小匹配
‘ * ’ ‘+’ ‘?’通常都是尽可能多的匹配字符(贪婪匹配)。有时候我们希望它尽可能少的匹配。

编译正则表达式
当需要重复使用某各正则表达式的时候 ,可以先正则表达式编译成模式对象
re.compile(正则表达式)

search: 查找任意位置的匹配项
match: 必须从字符串开头匹配
fullmatch: 整个字符串与正则完全匹配
在这里插入图片描述

group()
参考文章:python正则表达式
python之正则表达式大全
Python正则表达式,这一篇就够了

猜你喜欢

转载自blog.csdn.net/m0_52521883/article/details/113843911