在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要,正则表达式就是描述这些规则的工具,它定义了字符串的匹配模式。
正则表达式基本符号:
匹配任意字符:. ,
匹配字母数字下划线: \w
匹配空白字符:\s
匹配数字:\d
匹配单词的边界:\b
匹配字符串的开始:^ 匹配字符串的结束:$
匹配非字母数字下划线:\W
匹配非空白字符:\S
匹配非数字:\D
匹配非单词边界:\B
匹配来自字符的任意单一字符:[]
匹配不在字符集中的任意单一字符:[^]
匹配0次或多次:*
匹配1次或多次:+
匹配0次或1次: ?
匹配N次:{N}
匹配至少M次:{M,}
匹配至少M次,至多N次:{M,N}
分支:|
注释“:(?#)
匹配exp并捕获到自动命名的组中:(exp)
匹配exp并捕获到名为name的组中:(?<name>exp)
匹配exp但是不捕获匹配的文本:(?:exp)
匹配exp前面的位置:(?=exp)
匹配exp后面的位置:(?<=exp)
匹配后面不是exp的位置:(?!exp)
匹配前面不是exp的位置:(?<!exp)
重复任意次,但尽可能少重复:*?
重复1次或多次,但尽可能少重复:+?
重复0次或一次,但尽可能少重复:??
重复M到N次但尽可能少重复:{m,n}?
重复M次以上但尽可能少重复:{m,}?
python对正则表达式的支持:
re模块函数:
compile(pattern,flags=0) 编译正则表达式返回正则表达式对象
match(pattern,string,flags=0) 用正则表达式匹配字符串,成功返回匹配对象,否则None
search(pattern,string,flags=0) 搜索字符串第一次出现正则表达式的模式同上
split(pattern,string,maxsplit=0,flags=0) 用正则表达式指定的模式分隔符拆分字符串返回列表
sub(pattern,repl,string,count=0,flags=0) 用指定的字符串替换原字符串中与正则表达式匹配的模式可以用count指定替换的次数
fullmatch(pattern,string,) match函数的完全匹配版本
findall(pattern,string,flags) 查找字符串所有与正则表达式匹配的模式,返回字符串的列表
finditer(pattern,string,flags) 查找字符串所有与正则表达式匹配的模式,返回一个迭代器
purge() 清除隐式编译的正则表达式的缓存
re.l / re.IGNORECASE :忽略大小写匹配标记
re,M / re.MULTILINE: 多行匹配标记
验证用户名信息;
import re def main(): username = input('请输入用户名: ') qq = input('请输入QQ号: ') a1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username) if not a1: print('请输入有效的用户名.') a2 = re.match(r'^[1-9]\d{4,11}$', qq) if not a2: print('请输入有效的QQ号.') if a1 and a2: print('你输入的信息是有效的!') if __name__ == '__main__': main()提取电话号:
import re def main(): pattern = re.compile(r'(?<=\D)1[345678]\d{9}(?=\D)') sentence =""" 小明今年上6年级,爸爸在110工作,电话号是13254655654,他自己的电话号是15865487536 """ mylist = re.findall(pattern,sentence) print(mylist) print('*****分隔符号******') for temp in pattern.finditer(sentence): print(temp.group()) print('*****分隔符号******') a = pattern.search(sentence) while a: print(a.group()) a = pattern.search(sentence, a.end()) if __name__ == '__main__': main()替换字符串中的不良内容:
import re def main(): sentence = '你是猪' b = re.sub('[猪]','*', sentence,flags = re.IGNORECASE) print(b) if __name__ == '__main__': main()拆分长字符串:
import re def main(): sentence = '你眼中倒影的星河烂漫,是我不曾见过的世外梦幻。' list = re.split(r'[, 。]',sentence) while '' in list: list.remove('') print(list) if __name__ == '__main__': main()