Python程序设计Python程序设计第4章正则表达式.doc
文本预览下载声明
第4章正则表达式
本章主要内容包括字符串及其常用的方法、正则表达式及其应用。字符串是Python一种非常重要的数据类型,由英文字母、数字、中文和其他字符组成,字符常见的编码有UTF-8、GB2312、GBK等。Python 3.x版本统一使用utf-8编码,防止解析乱码。正则表达式是字符串处理的一种技术,使用re模块预定义特定模式去匹配一类具有共同特征的字符串,可以快速、准确地完成复杂查找、替换等处理,可应用于网络编程。最后介绍re模块提供的正则表达式函数与对象的用法。
4.1 字符串
美国标准信息交换码ASCII(American Standard Code for Information Interchange)是最早的字符串码,采用1个字节,对10个数字、26个大、小写字母及一些其他符号共256个进行编码。
后来出现的常见编码有UTF-8(8-bit Unicode Transformation Format)、GB2312、GBK(Chinese Internal Code Specification,汉字内码扩展规范)、CP936(GBK的Code Page为936)等。采用不同的编码格式意味着不同的表示和存储形式,比如国际通用的编码UTF-8编码以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言。GB2312是我国制定的中文编码标准,用1个字节表示英文字符,2个字节表示汉字。GBK是GB2312的扩充。CP936是微软公司在GBK基础上开发的编码方式,用两个字节表示中文。而Unicode是不同编码格式之间相互转换的基础。
在Windows平台上使用Python3.x时,Python源文件默认指定的是UTF-8编码,如果需要支持其他的编码,需要在源文件的第一行加上特殊申明,其语法结构如下:
#-*- coding: encoding -*-
例如,指定中文编码:# -*- coding: cp936 -*-
前面2.1.5节已经提到,字符串属于不可变序列类型,使用单引号、双引号、三单引号或三双引号作为界定符,并且不同的界定符之间可以相互嵌套。字符串除了支持序列通用法(如比较、计算长度、元素访问、分片操作等)以外,字符串类型还支持一些特有的操作方法,例如,格式化操作、字符串查找、字符串替换等。但由于字符串属于不可变序列,不能对字符串对象进行元素增加、修改与删除等操作。
字符串对象提供的replace( )和translate( )方法并不是对原字符串直接修改替换,而是返回一个修改替换后的结果字符串。
Python支持短字符串驻留机制,即:对于短字符串,将其赋值给多个不同的对象时,内存中只有一个副本,多个对象共享该副本。但长字符串不遵守驻留机制,例如:
str1=better city, better life
str2=str1
str2
better city, better life
id(str1)==id(str2) #变量str1、str2指向同一个内存地址
True
str1=str1*100
str2=str2*100
id(str1)==id(str2) #指向不同内存地址
False
在Python2.x中,字符串有str(非unicode)和unicode两种,其基类都是basestring。
st1=中国雄安
type(st1)
str
isinstance(st1,basestring) #检验str1是否为basestring
True
isinstance(st1,unicode) #检验str1是否属于unicode集
False
st2=u中国雄安
isinstance(st2,unicode)
True
在Python3.x中,字符串有str类型(与python2.x中的unicode一样)和bytes类型(与python2.x中的str一样),str对象和bytes对象可以使用encode() (str - bytes) 或者decode() (bytes - str)方法相互转化。
st1=中国雄安
type(st1)
class,str
st1=u中国雄安
type(st1)
class,str #st1是 str类
str1_b = bchina?
? ? type(str1_b)?
? ? class bytes #str1_b是bytes类
str_to_bytes= st1.encode(‘utf-8’)
str_to_bytes
b\xe4\xb8\xad\xe5\x9b\x
显示全部