python学习之正则表达式


元字符 .^$*+?{}[]|()\
. 通配符,任意一个字符
^ 字符串开头匹配
$ 字符串结尾匹配

* 紧挨着字符重复(0-无穷次)
+ 加号前面字符至少有一个(1-无穷次)
? (0-1)
{} {0,} = *
{1,} = +
{0,1} = ?
{6} 贪婪匹配
注意,*,+,?,等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

\ 反斜杠后边跟元字符去除特殊功能, 如\.
反斜杠后边跟普通字符实现特殊功能,如\d

\b 匹配一个特殊字符边界,如空格,&,#

| 或

() 分组

[] 字符集 中括号里没有特殊符号,特殊: ‘-’ 范围 ,‘^’ 非 ,‘\’转义符

?P<name> (?P<name>)分组命名
例:
>>> re.search("(?P<name>\d+)","alan39wang88liu77")
<_sre.SRE_Match object; span=(4, 6), match='39'>
>>> re.search("(?P<name>[a-z]+)","alan39wang88liu77").group("name")
'alan'
>>> re.search("(?P<name>[a-z]+)","alan39wang88liu77").group()
'alan'
>>> re.search("(?P<name>[a-z]+(?P<age>\d+))","alan39wang88liu77").group()
'alan39'
>>> re.search("(?P<name>[a-z]+)(?P<age>\d+)","alan39wang88liu77").group("name")
'alan'
>>> re.search("(?P<name>[a-z]+)(?P<age>\d+)","alan39wang88liu77").group("age")
'39'

re.findall("^H[\w]*[ \w\\\\d]*","Hello Worl\d") 结果 ['Hello Worl\\d'] #返回所有满足匹配条件的结果,放在列表里
re.search("\d+","aabdde34kdf3").group() #函数会在字符串内查找模式匹配,只找到第一个匹配
#通过调用group()方法得到匹配的字符串,
re.match("\d+","56daffdfd").group() #同search,不过尽在字符串开始处进行匹配
re.split('[ab]','abcd') 结果['','','cd'] #先按'a'分割到''和'bcd',在对''和'bcd'分别按'b'分割,
re.sub("\d+","a","fdfefj20303r") 结果'fdfefjar' 替换
re.subn("\d+","a","fdfefj20303rdfd4") 结果('fdfefjardfda', 2) 替换并返回替换次数
com=re.compile("\d+") com.findall('dfd4df5') 结果['4', '5'] #编译(效率提升)
i=re.finditer("\d","df3lj3ljl34ljj45l4jlj2kdjfw") 取值:next(i).group() #迭代对象,大数据匹配不用全部写入内存,用一个取一个
re.findall("www\.(?:baidu|163)\.com","dd2fjlsjwww.baidu.comfjldjflsj")
结果1:['www.baidu.com'] 加上"?:"去掉分组优先级
结果2:['baidu'] 分组优先级高

posted on 2020-04-16 13:27  秋雨的蝴蝶  阅读(112)  评论(0编辑  收藏  举报