正则表达式

    技术2024-02-21  103

    在编写处理字符串的程序或网页时,经常有查找符合某些复杂规则的字符串的需要,正则表达式就是描述这些规则的工具,它定义了字符串的匹配模式。

    正则表达式基本符号:

    匹配任意字符:. ,

    匹配字母数字下划线: \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()

     

    Processed: 0.012, SQL: 10