re模块
元字符 |
功能 |
. |
匹配除了换行符以外的任意字符 |
^ |
从字符串首位匹配。书写时必须写在首位,否则匹配为空 |
$ |
从字符串末尾匹配。书写时必须写在末尾,否则匹配为空 |
* |
重复匹配任意多次(包括0次) |
+ |
重复匹配任意多次(不包括0次) |
? |
匹配0次或1次 |
{n} |
n是一个非负整数。匹配确定的n次 |
{n,} |
至少匹配n次 |
{n,m} |
m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次 |
[xyz] |
字符集。匹配字符集中任何一个字符,除注释1的字符.(注释1) |
\ |
反斜杠。使元字符失去特殊功能;使部分普通字符实现特殊功能(注释2)。 |
( ) |
将( ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域。(注释3) |
| |
将两个匹配条件进行逻辑“或”(Or)运算 |
- 注释1
- -在[]里表示范围,比如[a-z]表示匹配a到z中的任意一个字符。 如果此时还需要匹配 - ,那么再在 [ ]里面加一个-(加在前后都可以),比如[a-z-],这时候就能匹配到 - 。
- ^ 则表示取反的意思。比如 [^a,b] 表示除了 a , b(注意:这里的’,’也是一个字符,没有其他的意义) 以外所有的字符都匹配(包括换行符)
- \在[]中还是有元字符的意义
import re
print(re.findall('a[1-9-]+','a1999-9'))
- 注释2
\d 匹配任何十进制的数,相当于 [0-9]
\D 匹配任何非数字字符,相当于 [^0-9]
\s 匹配任何空白字符,相当于 [ \t\n\r\f\v]
\S 匹配任何非空白字符,相当于 [^ \t\n\r\f\v]
\w 匹配任何字母和数字字符,相当于 [0-9a-zA-Z]
\W 匹配任何非字母和数字字符,相当于 [^0-9a-zA-Z]
\b 匹配一个特殊边界(非任何字母和数字的都是特殊字符)
- 注释3
import re
print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group()) #chengzhuo24
print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group('name') #chengzhuo
print(re.search('(?P<name>[a-z]+)(?P<age>\d+)','chengzhuo24zhuo25').group('age')) #24
# (?P<>re)相当于给分组起名字,后面跟的内容才是要匹配的
print(re.findall('www\.(163|baidu)\.com','assadwww.baidu.comsfasfd'))
#['baidu'] 这是因为优先显示分组的内容
print(re.findall('www\.(?:163|baidu)\.com','assadwww.baidu.comsfasfd'))
#['www.baidu.com'] (?:re)表示()不是一个分组
- 注释4
*+?{}都是贪婪匹配,加问号就可以变成惰性匹配
import re
print(re.findall('as+?','asssss')) #['as']
print(re.findall('as+','asssss')) #['asssss']
- 常用方法
-
- re.findall(pattern,str)
返回一个满足条件的所有结果的列表
-
- re.search(pattern,str)
返回一个对象,这个对象是满足条件的第一个匹配结果。取出匹配的字符串用这个对象的group()方法。
-
- re.match(pattern,str)
同search,但它只在字符串的开始匹配
-
print(re.split('a|ac|b','nnnannnacnnnnbnnnannn'))
#['nnn', 'nnn', 'cnnnn', 'nnn', 'nnn']
print(re.sub('a|ac|b','Y','nnnannnacnnnnbnnnannn'))
print(re.subn('a|ac|b','Y','nnnannnacnnnnbnnnannn'))
#('nnnYnnnYcnnnnYnnnYnnn', 4) 4是匹配到的次数
-
- re.compile(pattern)
返回一个规则对象
com=re.compile('[AV]+')
print(com.findall('AVjkhjjAhijkV'))
#['AV', 'A', 'V']
-
- re.finditer()
与findall()类似,但返回的是一个迭代器