python 基础知识

 

 

1. str 字符串操作

  常见的字符串函数
  zip 
      l = ['a', 'b', 'c', 'd', 'e', 'f']
      b = zip(l[:-1], l[1:])
      print(dict(b))  # 可以映射成字典,元组,列表
      {'a': 'b', 'b': 'c', 'c': 'd', 'd': 'e', 'e': 'f'}
  str1.split()
      过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串str1.splitlines():
      按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
      
  str1.join(): 
      用于将序列中的元素以指定的字符连接生成一个新的字符串。
      
  max():
      返回给定参数的最大值,参数可以为序列
      
  min():
      返回字符串中最小的字母。
      
  str1.replace(old, new[, max]):
      把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
      
  str1.maketrans():
      返回字符串转换后生成的新字符串。
      
  str47.translate(table[, delete]):
      intable = 'adsda
      outtable = '12345
      trantab = str.marketrans(intable, outtable)
      st1 = '*********'
      result = st1.translate(trantab[,delate])
      result 是翻译后的结果 delate   正则删除
      返回翻译后的字符串,若给出了 delete 参数,则将原来的bytes中的属于delete的字符删除,剩下的字符要按照table中给出的映射来进行映射 
      
  str1.startswith(str, beg=0,end=len(string)):
      方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg  end 指定值,则在指定范围内检查。
      
  str1.endswith(suffix[, start[, end]]):
      方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start""end"为检索字符串的开始与结束位置
      s
  str1.encode():
      指定的编码格式编码字符串
      
  bytes.decode():
      以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'
      
  str1.isalpha():
      方法检测字符串是否只由字母组成。
      
  str1.isalnum():
      检测字符串是否由字母和数字组成。
      
  str1.isupper():
      检测字符串中所有的字母是否都为大写。
      
  str1.islower():
      检测字符串是否由小写字母组成。
      
  str1.istitle():
      检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。
      
  str1.isdigit():
      检测字符串是否只由数字组成。
      
  str1.isnumeric():
      检测字符串是否只由数字组成。这种方法是只针对unicode对象
      
  str1.isdecimal():
      检查字符串是否只包含十进制字符。这种方法只存在于unicode对象
      
  str1.isspace():
      检测字符串是否只由空白字符组成
      
  len():
      返回对象(字符、列表、元组等)长度或项目个数。
      
  lower():
      转换字符串中所有大写字符为小写。
      
  upper():
      将字符串中的小写字母转为大写字母。
      
  swapcase():
      用于对字符串的大小写字母进行转换。
      
  capitalize():
      将字符串的第一个字母变成大写,其他字母变小写
      
  title():
      返回"标题化"的字符串,就是说所有单词都是以大写开始
      
  center(width[, fillchar]):   ?????
      返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
      
  ljust(width[, fillchar]):
      返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
      
  rjust(width[, fillchar]):
      回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
      
  zfill(width):
      返回指定长度的字符串,原字符串右对齐,前面填充0。
      
  count():
      统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置
      
  find():
      方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始)  end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1
      
  rfind():
      返回字符串最后一次出现的位置,如果没有匹配项则返回-1
      
  index():
      方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始)  end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
      
  rindex(str, beg=0 end=len(string)):
      返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定可选参数[beg:end]设置查找的区间。
  strip():
      用于移除字符串头尾指定的字符(默认为空格)
      
  lstrip():
      方法用于截掉字符串左边的空格或指定字符。
  rstrip():
      删除 string 字符串末尾的指定字符(默认为空格).
  ​常见的字符串函数
  zip 
      l = ['a', 'b', 'c', 'd', 'e', 'f']
      b = zip(l[:-1], l[1:])
      print(dict(b))  # 可以映射成字典,元组,列表
      {'a': 'b', 'b': 'c', 'c': 'd', 'd': 'e', 'e': 'f'}
  str1.split()
      过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串str1.splitlines():
      按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
      
  str1.join(): 
      用于将序列中的元素以指定的字符连接生成一个新的字符串。
      
  max():
      返回给定参数的最大值,参数可以为序列
      
  min():
      返回字符串中最小的字母。
      
  str1.replace(old, new[, max]):
      把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。
      
  str1.maketrans():
      返回字符串转换后生成的新字符串。
      
  str47.translate(table[, delete]):
      intable = 'adsda
      outtable = '12345
      trantab = str.marketrans(intable, outtable)
      st1 = '*********'
      result = st1.translate(trantab[,delate])
      result 是翻译后的结果 delate   正则删除
      返回翻译后的字符串,若给出了 delete 参数,则将原来的bytes中的属于delete的字符删除,剩下的字符要按照table中给出的映射来进行映射 
      
  str1.startswith(str, beg=0,end=len(string)):
      方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg  end 指定值,则在指定范围内检查。
      
  str1.endswith(suffix[, start[, end]]):
      方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start""end"为检索字符串的开始与结束位置
      s
  str1.encode():
      指定的编码格式编码字符串
      
  bytes.decode():
      以指定的编码格式解码 bytes 对象。默认编码为 'utf-8'
      
  str1.isalpha():
      方法检测字符串是否只由字母组成。
      
  str1.isalnum():
      检测字符串是否由字母和数字组成。
      
  str1.isupper():
      检测字符串中所有的字母是否都为大写。
      
  str1.islower():
      检测字符串是否由小写字母组成。
      
  str1.istitle():
      检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写。
      
  str1.isdigit():
      检测字符串是否只由数字组成。
      
  str1.isnumeric():
      检测字符串是否只由数字组成。这种方法是只针对unicode对象
      
  str1.isdecimal():
      检查字符串是否只包含十进制字符。这种方法只存在于unicode对象
      
  str1.isspace():
      检测字符串是否只由空白字符组成
      
  len():
      返回对象(字符、列表、元组等)长度或项目个数。
      
  lower():
      转换字符串中所有大写字符为小写。
      
  upper():
      将字符串中的小写字母转为大写字母。
      
  swapcase():
      用于对字符串的大小写字母进行转换。
      
  capitalize():
      将字符串的第一个字母变成大写,其他字母变小写
      
  title():
      返回"标题化"的字符串,就是说所有单词都是以大写开始
      
  center(width[, fillchar]):   ?????
      返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。
      
  ljust(width[, fillchar]):
      返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。
      
  rjust(width[, fillchar]):
      回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
      
  zfill(width):
      返回指定长度的字符串,原字符串右对齐,前面填充0。
      
  count():
      统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置
      
  find():
      方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始)  end(结束) 范围,则检查是否包含在指定范围内,如果指定范围内如果包含指定索引值,返回的是索引值在字符串中的起始位置。如果不包含索引值,返回-1
      
  rfind():
      返回字符串最后一次出现的位置,如果没有匹配项则返回-1
      
  index():
      方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始)  end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
      
  rindex(str, beg=0 end=len(string)):
      返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常,你可以指定可选参数[beg:end]设置查找的区间。
  strip():
      用于移除字符串头尾指定的字符(默认为空格)
      
  lstrip():
      方法用于截掉字符串左边的空格或指定字符。
  rstrip():
      删除 string 字符串末尾的指定字符(默认为空格).
  ​

2. OS模块 文件操作

  
  1.获取当前操作系统         os.name
  2.查看当前操作系统的详细信息    os.uname()
  3.获取当前操作系统的环境变量     ** os.environ    返回为一个dict
  4.获取指定的环境变量    os.environ.get('path')    **
  5.获取当前目录     os.curdir
  6.获取当前工作目录       os.getcwd()
  7.在当前目录下创建新的目录    os.mkdir('path')
  8.删除目录       os.rmdir()
  9.删除文件       os.remove()
  10.文件重命名         os.rename(old, new)
  11.获取文件属性      os.stat('path')
  12.路径拼接        os.path.join()
  13.拆分文件扩展名        os.path.split()       os.path.splitext()                ************
  14.判断目录是否存在      os.path.exists()
  15.判断是否是目录                os.path.isdir()
  16.判断是否是文件        os.path.isfile()
  17.获取文件的大小        os.path.getsize()
  18.获取当前文件目录所在的目录   os.path.dirname()
  19.获取当前文件的文件名         os.path.basename() 
  ​
  1.获取当前操作系统         os.name
  2.查看当前操作系统的详细信息    os.uname()
  3.获取当前操作系统的环境变量     ** os.environ    返回为一个dict
  4.获取指定的环境变量    os.environ.get('path')    **
  5.获取当前目录     os.curdir
  6.获取当前工作目录       os.getcwd()
  7.在当前目录下创建新的目录    os.mkdir('path')
  8.删除目录       os.rmdir()
  9.删除文件       os.remove()
  10.文件重命名         os.rename(old, new)
  11.获取文件属性      os.stat('path')
  12.路径拼接        os.path.join()
  13.拆分文件扩展名        os.path.split()       os.path.splitext()                ************
  14.判断目录是否存在      os.path.exists()
  15.判断是否是目录                os.path.isdir()
  16.判断是否是文件        os.path.isfile()
  17.获取文件的大小        os.path.getsize()
  18.获取当前文件目录所在的目录   os.path.dirname()
  19.获取当前文件的文件名         os.path.basename() 
  ​

文件打开 open()

  
  模式  描述
  r   以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
  rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
  r+  打开一个文件用于读写。文件指针将会放在文件的开头。
  rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
  w   打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  a   打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
  ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
  模式  描述
  r   以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
  rb  以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
  r+  打开一个文件用于读写。文件指针将会放在文件的开头。
  rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
  w   打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  w+  打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
  a   打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  ab  以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
  a+  打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
  ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

file() 对象方法

  
  file.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)
  ​
  file.readline() 返回一行file.readlines([size]) 返回包含size行的列表,size 未指定则返回全部行for line in f: print line #通过迭代器访问f.write("hello\n") #如果要写入字符串以外的数据,先将他转换为字符串.f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).
  ​
  f.seek(偏移量,[起始位置]) 用来移动文件指针.
  ​
  偏移量:单位:比特,可正可负
  起始位置:0-文件头,默认值;1-当前位置;2-文件尾
  f.close() 关闭文件
  file.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)
  ​
  file.readline() 返回一行file.readlines([size]) 返回包含size行的列表,size 未指定则返回全部行for line in f: print line #通过迭代器访问f.write("hello\n") #如果要写入字符串以外的数据,先将他转换为字符串.f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).
  ​
  f.seek(偏移量,[起始位置]) 用来移动文件指针.
  ​
  偏移量:单位:比特,可正可负
  起始位置:0-文件头,默认值;1-当前位置;2-文件尾
  f.close() 关闭文件

 

3.time datetime calendar

  
  time.time()  时间戳,从1970-1-1 0时开始计算时间  秒
  time.gmtime()  时间戳转换为UTC时间
  time.localtime()  获取本地时间
  time.mktime()    将时间转化为时间戳函数
  time.asctime()     将时间转化为用户可读的字符串格式
  time.ctime()    将时间戳转化为用户可读的时间
  time.strftime()  将时间字符串格式化输出给用户看
  time.strptime()   将时间转化为元组时间的格式
  ​
  datetime.datetime.now()
  datetime.datetime()
  .strftime()
  datetime.datetime.strptime(date, '%Y-%m-%d')
  ​
  calendar.month()
  calendar.calendar()
  calendar.monthrange()
  calendar.monthcalendar()
  ​
  time.time()  时间戳,从1970-1-1 0时开始计算时间  秒
  time.gmtime()  时间戳转换为UTC时间
  time.localtime()  获取本地时间
  time.mktime()    将时间转化为时间戳函数
  time.asctime()     将时间转化为用户可读的字符串格式
  time.ctime()    将时间戳转化为用户可读的时间
  time.strftime()  将时间字符串格式化输出给用户看
  time.strptime()   将时间转化为元组时间的格式
  ​
  datetime.datetime.now()
  datetime.datetime()
  .strftime()
  datetime.datetime.strptime(date, '%Y-%m-%d')
  ​
  calendar.month()
  calendar.calendar()
  calendar.monthrange()
  calendar.monthcalendar()
  ​

格式化时间字符串

  
  %y 两位数的年份表示(00-99
  %Y 四位数的年份表示(000-9999
  %m 月份(01-12
  %d 月内中的一天(0-31
  %H 24小时制小时数(0-23
  %I 12小时制小时数(01-12
  %M 分钟数(00=59
  %S 秒(00-59
  %a 本地简化星期名称
  %A 本地完整星期名称
  %b 本地简化的月份名称
  %B 本地完整的月份名称
  %c 本地相应的日期表示和时间表示
  %j 年内的一天(001-366
  %p 本地A.M.或P.M.的等价符
  %U 一年中的星期数(00-53)星期天为星期的开始
  %w 星期(0-6),星期天为星期的开始
  %W 一年中的星期数(00-53)星期一为星期的开始
  %x 本地相应的日期表示
  %X 本地相应的时间表示
  %Z 当前时区的名称
  %% %号本身
  %y 两位数的年份表示(00-99
  %Y 四位数的年份表示(000-9999
  %m 月份(01-12
  %d 月内中的一天(0-31
  %H 24小时制小时数(0-23
  %I 12小时制小时数(01-12
  %M 分钟数(00=59
  %S 秒(00-59
  %a 本地简化星期名称
  %A 本地完整星期名称
  %b 本地简化的月份名称
  %B 本地完整的月份名称
  %c 本地相应的日期表示和时间表示
  %j 年内的一天(001-366
  %p 本地A.M.或P.M.的等价符
  %U 一年中的星期数(00-53)星期天为星期的开始
  %w 星期(0-6),星期天为星期的开始
  %W 一年中的星期数(00-53)星期一为星期的开始
  %x 本地相应的日期表示
  %X 本地相应的时间表示
  %Z 当前时区的名称
  %% %号本身

4.面向对象

  
  @property   # 属性包装器
  @   .setter       # 修改属性
  @classmethod    # 类方法
  @staticmethod     # 抽象方法
  MethodType         # 动态添加抽象方法  from abc import abstractmethod, ABCMeta
          metaclass=ABCmeta   # 默认的类参数
          @abstractmethod    # 定义抽象方法
   super().__init__()
  ​
  from enum import Enum       # 枚举
  class Color(Enum):
      red = 1
  @property   # 属性包装器
  @   .setter       # 修改属性
  @classmethod    # 类方法
  @staticmethod     # 抽象方法
  MethodType         # 动态添加抽象方法  from abc import abstractmethod, ABCMeta
          metaclass=ABCmeta   # 默认的类参数
          @abstractmethod    # 定义抽象方法
   super().__init__()
  ​
  from enum import Enum       # 枚举
  class Color(Enum):
      red = 1

 

 

运算符重载

  
  在类中,对内置对象(例如,整数和列表)所能做的事,几乎都有相应的特殊名称的重载方法。下表列出其中一些最常用的重载方法。
  ​
    方法            重载          调用                              
    init          构造函数        对象建立:X = Class(args)            
    del           析构函数        X对象收回                           
    add           运算符+        如果没有iadd,X+Y,X+=Y               
    or            运算符\|(位OR)  如果没有ior,X\|Y,X\|=Y              
    repr,str      打印、转换       print(X)、repr(X),str(X)         
    call          函数调用        X(*args,**kargs)                
    getattr       点号运算        X.undefined                     
    setattr       属性赋值语句      X.any = value                   
    delattr       属性删除        del X.any                       
    getattribute  属性获取        X.any                           
    getitem       索引运算        X[key],X[i:j],没iter时的for循环和其他迭代器
    setitem       索引赋值语句      X[key] = value,X[i:j] = sequence
    delitem       索引和分片删除     del X[key],del X[i:j]           
    len           长度          len(X),如果没有bool,真值测试            
    bool          布尔测试        bool(X),真测试                     
    lt,gt,        特定的比较       X < Y,X > Y                     
    le,ge,                    X<=Y,X >= Y                     
    eq,ne                     X == Y,X != Y                   
    radd          右侧加法        Other+X                         
    iadd          实地(增强的)加法   X += Y (or else add)            
    iter,next     迭代环境        I = iter(X),next(I)             
    contains      成员关系测试      item in X (任何可迭代的)              
    index         整数值         hex(X),bin(X),oct(X),O[X],O[X:] 
    enter,exit    环境管理器       with obj as var:                
    get,set       描述符属性       X.attr,X.attr = value,del X.attr
    new           创建          在init之前创建对象                     
  ​
  在类中,对内置对象(例如,整数和列表)所能做的事,几乎都有相应的特殊名称的重载方法。下表列出其中一些最常用的重载方法。
  ​
    方法            重载          调用                              
    init          构造函数        对象建立:X = Class(args)            
    del           析构函数        X对象收回                           
    add           运算符+        如果没有iadd,X+Y,X+=Y               
    or            运算符\|(位OR)  如果没有ior,X\|Y,X\|=Y              
    repr,str      打印、转换       print(X)、repr(X),str(X)         
    call          函数调用        X(*args,**kargs)                
    getattr       点号运算        X.undefined                     
    setattr       属性赋值语句      X.any = value                   
    delattr       属性删除        del X.any                       
    getattribute  属性获取        X.any                           
    getitem       索引运算        X[key],X[i:j],没iter时的for循环和其他迭代器
    setitem       索引赋值语句      X[key] = value,X[i:j] = sequence
    delitem       索引和分片删除     del X[key],del X[i:j]           
    len           长度          len(X),如果没有bool,真值测试            
    bool          布尔测试        bool(X),真测试                     
    lt,gt,        特定的比较       X < Y,X > Y                     
    le,ge,                    X<=Y,X >= Y                     
    eq,ne                     X == Y,X != Y                   
    radd          右侧加法        Other+X                         
    iadd          实地(增强的)加法   X += Y (or else add)            
    iter,next     迭代环境        I = iter(X),next(I)             
    contains      成员关系测试      item in X (任何可迭代的)              
    index         整数值         hex(X),bin(X),oct(X),O[X],O[X:] 
    enter,exit    环境管理器       with obj as var:                
    get,set       描述符属性       X.attr,X.attr = value,del X.attr
    new           创建          在init之前创建对象                     
  ​

5.正则表达式

 
  finditer()  迭代器     next() 方法进行迭代器操作
  sub()    返回被替换后的字符串
  subn()   返回一个元组, 第一个为被替换是字符串, 第二个是替换的次数分组;
      除了简单的判断是否匹配外, 还能提取子串
      () 表示提取出的分组
      str2 = '01053247654'
      m = re.match((r'(\d{3})(\d{8})'), str2)
      m = re.match((r'(?P<name1>\d{3})-(?P<name2>\d{8})'), str2)
  ​
      group(0)  原始字符串
      group(1)  
      group(2)
      m = m.groups()
      print(m)
      
      
  compile(pattern ,flags=0)    pattern 正则表达式
      
      
      

 

正则常用字符

  
  \w匹配字母数字及下划线\W匹配非字母数字及下划线\s匹配任意空白字符,等价于 [\t\n\r\f].
  ​
  \S匹配任意非空字符\d匹配任意数字,等价于 [0-9]
  ​
  \D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串\z匹配字符串结束\G匹配最后匹配完成的位置\n匹配一个换行符\t匹配一个制表符^匹配字符串的开头$匹配字符串的末尾。
  ​
  .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
  ​
  [...]用来表示一组字符,单独列出:[amk] 匹配 'a''m''k'
  ​
  [^...]不在[]中的字符:abc 匹配除了a,b,c之外的字符。*匹配0个或多个的表达式。+匹配1个或多个的表达式。?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
  ​
  {n}精确匹配n个前面表达式。
  ​
  {n, m}匹配 n  m 次由前面的正则表达式定义的片段,贪婪方式a|b匹配a或b
  ​
  ( )匹配括号内的表达式,也表示一个组
  \w匹配字母数字及下划线\W匹配非字母数字及下划线\s匹配任意空白字符,等价于 [\t\n\r\f].
  ​
  \S匹配任意非空字符\d匹配任意数字,等价于 [0-9]
  ​
  \D匹配任意非数字\A匹配字符串开始\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串\z匹配字符串结束\G匹配最后匹配完成的位置\n匹配一个换行符\t匹配一个制表符^匹配字符串的开头$匹配字符串的末尾。
  ​
  .匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
  ​
  [...]用来表示一组字符,单独列出:[amk] 匹配 'a''m''k'
  ​
  [^...]不在[]中的字符:abc 匹配除了a,b,c之外的字符。*匹配0个或多个的表达式。+匹配1个或多个的表达式。?匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
  ​
  {n}精确匹配n个前面表达式。
  ​
  {n, m}匹配 n  m 次由前面的正则表达式定义的片段,贪婪方式a|b匹配a或b
  ​
  ( )匹配括号内的表达式,也表示一个组

正则匹配模式

  
  re.match()    开头开始匹配  一个
  re.search()    整个查找 一个
  re.findall()     全局查找,匹配所有
  re.sub('查找要替换的 表达式', '替换的字符', str)
  re.compile()     compile()还可以传入修饰符,例如re.S等修饰符,这样在search()、findall()等方法中就不需要额外传了。所以compile()方法可以说是给正则表达式做了一层封装,以便于我们更好地复用。
  re.match()    开头开始匹配  一个
  re.search()    整个查找 一个
  re.findall()     全局查找,匹配所有
  re.sub('查找要替换的 表达式', '替换的字符', str)
  re.compile()     compile()还可以传入修饰符,例如re.S等修饰符,这样在search()、findall()等方法中就不需要额外传了。所以compile()方法可以说是给正则表达式做了一层封装,以便于我们更好地复用。

常用的表达式

  
  一、校验数字的表达式
  数字:^[0-9]*$
  n位的数字:^\d{n}$
  至少n位的数字:^\d{n,}$
  m-n位的数字:^\d{m,n}$
  零和非零开头的数字:^(0|[1-9][0-9]*)$
  非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
  带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
  正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
  有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
  有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
  非零的正整数:^[1-9]\d*$  ^([1-9][0-9]*){1,3}$  ^\+?[1-9][0-9]*$
  非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
  非负整数:^\d+$  ^[1-9]\d*|0$
  非正整数:^-[1-9]\d*|0$  ^((-\d+)|(0+))$
  非负浮点数:^\d+(\.\d+)?$  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$  ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$  ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  浮点数:^(-?\d+)(\.\d+)?$  ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
  校验字符的表达式
  汉字:^[\u4e00-\u9fa5]{0,}$
  英文和数字:^[A-Za-z0-9]+$  ^[A-Za-z0-9]{4,40}$
  长度为3-20的所有字符:^.{3,20}$
  由26个英文字母组成的字符串:^[A-Za-z]+$
  由26个大写英文字母组成的字符串:^[A-Z]+$
  由26个小写英文字母组成的字符串:^[a-z]+$
  由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  由数字、26个英文字母或者下划线组成的字符串:^\w+$  ^\w{3,20}$
  中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$  ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
  禁止输入含有~的字符:[^~\x22]+
  ​
  ​
  三、特殊需求表达式
  Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  InternetURL:[a-zA-z]+://[^\s]*  ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX""XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
  国内电话号码(0511-4405222、021-87888822)\d{3}-\d{8}|\d{4}-\d{7}
  电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
  身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)^[a-zA-Z]\w{5,17}$
  强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  日期格式:^\d{4}-\d{1,2}-\d{1,2}
  一年的12个月(01~09和1~12)^(0?[1-9]|1[0-2])$
  一个月的31天(01~09和1~31)^((0?[1-9])|((1|2)[0-9])|30|31)$
  钱的输入格式:
  有四种钱的表示形式我们可以接受:"10000.00"  "10,000.00", 和没有 "分"  "10000"  "10,000"^[1-9][0-9]*$
  这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
  一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
  这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
  必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10"  "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
  这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
  这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
  1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
  备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  中文字符的正则表达式:[\u4e00-\u9fa5]
  双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))
  一、校验数字的表达式
  数字:^[0-9]*$
  n位的数字:^\d{n}$
  至少n位的数字:^\d{n,}$
  m-n位的数字:^\d{m,n}$
  零和非零开头的数字:^(0|[1-9][0-9]*)$
  非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(\.[0-9]{1,2})?$
  带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})$
  正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
  有两位小数的正实数:^[0-9]+(\.[0-9]{2})?$
  有1~3位小数的正实数:^[0-9]+(\.[0-9]{1,3})?$
  非零的正整数:^[1-9]\d*$  ^([1-9][0-9]*){1,3}$  ^\+?[1-9][0-9]*$
  非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
  非负整数:^\d+$  ^[1-9]\d*|0$
  非正整数:^-[1-9]\d*|0$  ^((-\d+)|(0+))$
  非负浮点数:^\d+(\.\d+)?$  ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$  ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$  ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  浮点数:^(-?\d+)(\.\d+)?$  ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
  校验字符的表达式
  汉字:^[\u4e00-\u9fa5]{0,}$
  英文和数字:^[A-Za-z0-9]+$  ^[A-Za-z0-9]{4,40}$
  长度为3-20的所有字符:^.{3,20}$
  由26个英文字母组成的字符串:^[A-Za-z]+$
  由26个大写英文字母组成的字符串:^[A-Z]+$
  由26个小写英文字母组成的字符串:^[a-z]+$
  由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  由数字、26个英文字母或者下划线组成的字符串:^\w+$  ^\w{3,20}$
  中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$  ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
  禁止输入含有~的字符:[^~\x22]+
  ​
  ​
  三、特殊需求表达式
  Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  InternetURL:[a-zA-z]+://[^\s]*  ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX""XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
  国内电话号码(0511-4405222、021-87888822)\d{3}-\d{8}|\d{4}-\d{7}
  电话号码正则表达式(支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号): ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
  身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X:(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线)^[a-zA-Z]\w{5,17}$
  强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  日期格式:^\d{4}-\d{1,2}-\d{1,2}
  一年的12个月(01~09和1~12)^(0?[1-9]|1[0-2])$
  一个月的31天(01~09和1~31)^((0?[1-9])|((1|2)[0-9])|30|31)$
  钱的输入格式:
  有四种钱的表示形式我们可以接受:"10000.00"  "10,000.00", 和没有 "分"  "10000"  "10,000"^[1-9][0-9]*$
  这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
  一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
  这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
  必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10"  "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
  这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
  这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
  1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
  备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  中文字符的正则表达式:[\u4e00-\u9fa5]
  双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  HTML标记的正则表达式:<(\S*?)[^>]*>.*?|<.*? /> ( 首尾空白字符的正则表达式:^\s*|\s*$(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值