python学习之正则表达式


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

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

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

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

| 或

() 分组

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

?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 World") 结果 ['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'] 分组优先级高

原文地址:https://www.cnblogs.com/jinpingzhao/p/12712231.html