1、regex:是一种文本模式的描述方法
2、re.compile()向它传入一个字符串值,表示正则表达式,它将返回一个Regex模式对象(简称为Regex对象:正则对象)
3、Regex对象的search()方法查找传入的字符串,寻找正则表达式的所有匹配。没有找到返回None ,找到返回Match对象,该对象有一个group()方法,它返回被查找字符串中实际匹配的文本。
4、group() 1返回第一个匹配项,2返回第二个匹配项,0 或者不传入参数,返回整个文本。groups()返回所有的分组
5、\(和\)转移字符将匹配实际的括号字符
6、字符 | 称为管道,用于匹配许多表达式中的一个,或的关系。第一次出现的字符串就返回匹配结果,findall()方法将找到所有的匹配的地方
7、星号* 意味着匹配零次或者多次,即星号之前的分组,可以在文本中出现任意次数,0~无穷
8、加号+ 意味着匹配一次或者多次,至少一次匹配
9、花括号{3}:指定匹配的次数,{3,6}:最少3次,最多6次
10、Python的正则表达式默认是贪心算法,在没有二义的情况下,它们会尽可能的匹配最长的字符串。花括号的非贪心算法版本匹配尽可能端的字符串比如指定了{3},就算有4个也只会匹配3个
11、search()方法返回一个Match对象, 包括被查找的字符串中的“第一次”匹配的文本, findall()方法将返回一组字符串,包含被查找的字符串中的所有的匹配;另外,findall()方法返回的不是一个Match对象,而是一个字符串列表。有l两种情况,对于没有分组的正则表达式,返回列表中就是被查找的字符串,对于有分组的正则表达式,返回的是元组的列表
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') # has no groups
res =phoneNumRegex.findall('Cell:415-666-5555 work:212-555-5555')
print(res)
phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)') # has no groups
res =phoneNumRegex.findall('Cell:415-666-5555 work:212-555-5555')
print(res)
# the result is below:
['415-666-5555', '212-555-5555']
[('415', '666-5555'), ('212', '555-5555')]
12、正则表达式字符分类:\d :0--9的任何数字 \D:除了0--9数字之类的任何字符 \w:任何字符,数字或者下划线字符 \W:除了字符,数字和下划线之外的任何字符 \s:空格,制表符,换行符 \S:除了空格,制表符,换行符以外的任何字符 。
13、正则表达式网:https://www.regexpal.com/, https://www.cnblogs.com/cp-miao/p/5567115.html 等
13、用方括号[adcdefg]定义自己的字符分类,用来匹配字符串。
[a-z0-9]:短横线表示字符或者数字的范围,在方括号内,普通的正则表达式符号不会被解释,所以不需要加上转移符号。
在方括号的左侧加上[^abcdef]表示非字符类,也就是将匹配不在这个字符类中的所有字符。
14、在正则表达式开始位置使用^Hello,表示匹配必须发生在被查找文本开始处。 类似,在末尾添加Hello$表示该字符串必须以
这个正则表达式的模式结束。也可以两个符号同时使用。
15、正则表达式中:句点 "."字符称为通配符,它匹配除了换行之外的所有字符。但是句号点字符只能匹配一个字符。
点和星连起来就可以匹配任意文本: " .* ":表示除了换行符外的其他任意文本,是一种贪心模式,总是匹配尽可能多的文本。
如果要用非贪心模式:使用 .*?问号告诉python用非贪心模式进行匹配。
re.DOTALL 作为re.compile()的第二个参数,可以让句点字符匹配所有的字符,包括换行符\n。
16、向re.compile()中传入第二个参数re.IGNORECASE或者re.I 让正则表达式不区分大小写进行匹配。
17、正则表达式知识汇总:
18、Regex对象的sub()方法用于将找到的字符串用新的文本替换。传入两个参数,第一个参数是字符串,用于取代发现的匹配,第二个参数是一个字符串,即要替换的字符串。结果返回替换完成后的字符串。
nameRegex = re.compile(r'Agent \w+')
res = nameRegex.sub('CENSORED', 'Agent Alice gave the secrect documents to Agent Bot.')
print(res)
结果是:
CENSORED gave the secrect documents to CENSORED.
19、忽略正则表达式字符串中的空白符和注释,向re.cmpile()传入变量re.VERBOSE,作为第二个参数。
使用管道符号| 将变量组合起来,作为第二个参数,在这里是按位或的关系