在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要,正则表达式就是描述这些规则的工具,它定义了字符串的匹配模式。
正则表达式基本符号:
匹配任意字符:. ,
匹配字母数字下划线: \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()