正则表达式

一、正则表达式

正则表达式(Regular Expession 简称re),又称规则表达式

使用字符组合成规则来描述、匹配一系列符合条件的字符串

用途:

​ a. 用来文本搜索和替换

​ b. 查询指定数据

​ c. 分割比较复杂的字符串(爬虫获取图片、音频等内容)

函数含义
re.compile(pattern,flags=0)编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
re.match(pattern, string[, flags=0])匹配
re.findall(pattern,string,flags=0)匹配所有的字符串
import re
dir(re)
查看正则模块包含属性和方法

二、正则语法

1. []  #代表原子表,存储表达式、字符集合。匹配所包含任意一个字符
  [a] #匹配一个字母a,总是从字符串开头开始匹配
  	   pattern = re.compile("[a][a]")
      result = pattern.match("aabaa")
      print(result)
  [abc] #匹配任意一个字母a/b/c,哪个字母在开头,先匹配谁
      pattern = re.compile("[abc]")
      result = pattern.match("abcbaa")
  [a-z] #匹配任意一个小写字母
  [\u4e00-\u9fa5] #匹配汉字
      pattern = re.compile("[\u4e00-\u9fa5]")
      result = pattern.match("帅哥")
  [AbCd] #匹配任意一个大小写字母
  [a-zA-Z] #匹配任意一个字母
  [a-zA-Z0-9] #匹配任意一个数字和字母

2. ^   # 在原子表外,以什么为开头;在原子表内,除了什么之外
  ^a[a-zA-Z0-9] # 匹配以a开头的双位数
  	   pattern = re.compile("^a[a-zA-Z0-9]")
      result = pattern.match("aaa")
  [^a-zA-Z0-9]  # 除了这些字母以外 
      pattern = re.compile("[^a-zA-Z0-9]")
      result = pattern.match("#aa")
3. $   # 以什么为结尾 ^和$搭配来使用,这样才能限制你匹配的内容和长度
  "^1[3-8][0-9]{9}$" 匹配手机号
      pattern = re.compile("^1[3-8][0-9]{9}$")
      result = pattern.match("13843844380")
   
4.{m}  # 表示前边数量m个,不能单独使用
 [a][a][a] == [a]{3}
 [a-zA-Z]{3} #匹配任意三个字母
 ^[a-zA-Z]{3} #开头匹配任意三个字母
 ^[a-zA-Z]{3}[0-9]{8}$
      pattern = re.compile("^[a-zA-Z]{3}[0-9]{8}$")
      result = pattern.match("abc99998888")
5.{m,n} # 表示数量从m到n个,不能单独使用
 	   pattern = re.compile("^[1-9][0-9]{4,10}")
      result = pattern.match("13599")
6.{m,}  # 至少多少个,也不可以单独使用
7. ?    #  可有可无, 匹配前边表达式0次或者1次,属于非贪婪限定符
      pattern = re.compile("^[1-9][0-9]?")
      result = pattern.match("1")
       #  判断正负数
      pattern = re.compile("[-+]?[0-9]")
      result = pattern.match("+5")
8. .    # 匹配除了\n符以外的任意字符
      不匹配\n
      pattern = re.compile(".")
      result = pattern.match("\n")
      匹配
      pattern = re.compile(".")
      result = pattern.match("a")
9. *   # 匹配字符前边任意次{0,}
      pattern = re.compile("a*")
      result = pattern.match("a")
10. .* # 匹配除了换行符以外任意多次 贪婪匹配
      pattern = re.compile(".*")
      result = pattern.match("kbbbbbbccccddkdkd")
11. .*? # 匹配除了换行符之外临近字符 非贪婪匹配
      pattern = re.compile("a.*?a")
      result = pattern.match("alklkkjadsfhanlkjfhalkjfaa")
12. ()
   (?:pattern) # 返回包含括号里的值
      result = re.findall("Windows(?:95|98|NT|2000|7)","Windows98")
   (?=pattern) # 返回不包含括号里的值
      result = re.findall("Windows(?=95|98|NT|2000|7|ME|XP)","WindowsMEWindowsXP")
   (?!pattern) # 只返回不包含内容 
      result = re.findall("Windows(?!95|98|NT|2000)","Windows1999Windows2000")
13. | # 表示或

三、特殊意义的字符

特殊字符含义
\d[0-9]
\D[^0-9]
\w[a-zA-Z0-9_]
\W[^a-zA-Z0-9_]
\s匹配空白字符
\S匹配非空白字

四、普通字符

普通字符 
1-9 
a-zA-Z
元字符
^ $ . * + ? = ! : | \ / () [] {}
由于它们是构造各种匹配复杂文本正则表达式的基本字符,所以被称为元字符

五、非打印字符

字符描述
\n换行符,等价于\x0c 和 \cL
\r匹配一个回车符\t\n 等价于\x0d和\cM
\s匹配任何空白字符,包括空格,制表符,换页符等等,等价于[\f\n\r\t\v]
\S匹配任何非空白字符,等价于[^\f\n\r\t\v]
\t匹配制表符,等价于\x09和\cl
\v匹配垂直制表符。等价于\x0b和\cK

六、练习

import re

def isValidQQ(qq):
   pattern = re.compile("[1-9][0-9]{4,10}$")
   r = pattern.match(qq)
   if r:
      return True
   else:
      return False

def isCheckQQ(qq):
   if qq.isdigit() == False:
       return "QQ{}号不全为数字".format(qq)
   if len(qq) < 5:
       return "QQ{}号长队不够".format(qq)
   if isValidQQ(qq) == True:
       return "QQ{}号合法".format(qq)
   else:
       return "QQ{}号不合法".format(qq)

if __name__ == "__main__":
   while True:
       qq = input("请输入qq号:\n")
       if qq == "q":
           break
       print(isCheckQQ(qq))
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页