字符串
-字符串是 Python 中最常用的数据类型。(可以说是大多数语言都常用)
1. 创建字符串
( '' 或 "" 和 '''''')(单,双和三引号)(字符串可以为空)-单引号:包含普通字符串,可以包含双引号,不能包含特殊字符。-双引号:可以包含单引号。-三引号:可以包含单引号和双引号,可以包含特殊字符。三引号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。(所见即所得)
str = '' (此时字符串str即为空)str1 = 'hello'str2 = "world"str3 = '''Tab (\t)__strspecial [\n\n] string'''注意:特殊字符:制表符 \t 换行符 \n输出:Friends CGI Demo ERROR
%s
ERROR
%s Tab ( )__strspecial [] string2. 访问字符串
可用*下标*的形式访问字符串中的字符。
#!/usr/bin/python3# _*_ coding:UTF-8 _*_str1 = 'hello'str2 = "world" # 利用下标print ("str1[1]:", str1[1]) # str1[1]: e# [左边界:右边界] 可以取到下标1,取不到4print ("str2[1:4]:", str2[1:4]) # str2[1:4]: orl# [左边界:右边界:步数] 隔一定的步数,取一次值print ("str2[0:5:2]:", str2[0:5:2]) # str2[0:5:2]: wrd输出:str1[1]: estr2[1:4]: orlstr2[0:5:2]: wrd
3. 转义字符
在字符串中使用特殊字符时,前面加反斜杠(\)转义字符。
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符 |
\ | 反斜杠符号 |
' | 单引号 |
" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\000 | 空 |
\v | 纵向制表符 |
\t | 横向制表符 |
\n | 换行 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数 |
\xyy | 十六进制数 |
4. 特殊的操作符
- 字符串连接: +
"hello" + "world" 输出"helloworld"
- 重复输出字符串: *
"hello" * 3 输出:"hellohellohello"
- 成员运算符: in 和 not in
'e' in "hello" : 输出: True 'a' in "hello" 输出: False
- 输出原始字符串: r/R
print r("\n") 或 print R("\n") 输出:\n
- 输出Unicode 字符串:u
print (u'Hello\u0020World !')输出:u'Hello World !'
- 格式化字符串: %
print ("I am %s, i'm %d !" % ("xiaoming",18)) 输出:I am xiaoming, i'm 18 !**注意点**从左到右依次查看 "I am %s, i'm %d !" % ("xiaoming",18)%s、%d 为字符串格式化符号% 格式符 注意:<< 后面与对应值有个空格隔开>>("xiaoming",18) 与%s,%d一一对应的值- python字符串格式化符号: %s 字符串 (采用str()的显示) %r 字符串 (采用repr()的显示) %c 单个字符 %b 二进制整数 %d 十进制整数 %i 十进制整数 %o 八进制整数 %x 十六进制整数 %e 指数 (基底写为e) %E 指数 (基底写为E) %f 浮点数 %F 浮点数,与上相同 %g 指数(e)或浮点数 (根据显示长度) %G 指数(E)或浮点数 (根据显示长度) %% 字符"%"
- 附:格式化操作符的一些辅助指令:
* 定义宽度或者小数点精度 - 用做左对齐 + 在正数前面显示加号( + )在正数前面显示空格 # 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') 0 显示的数字前面填充'0'而不是默认的空格 (var) 映射变量(字典参数) m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) 例: print(">|%+10x|<" % 10) print(">|%04d|<" % 5) print(">|%6.3f|<" % 2.3) print(">|%.*f|<" % (4, 1.2)) 输出:(>| |< 仅作分割线) >| +a|< >|0005|< >| 2.300|< >|1.2000|<
- format 函数 ( 转载自CSDN "踏实_进取")
Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。 基本语法是通过 {} 和 : 来代替以前的 % 。 format 函数可以接受不限个参数,位置可以不按顺序。 >>>"{} {}".format("hello", "world") # 不设置指定位置,按默认顺序 'hello world' >>> "{0} {1}".format("hello", "world") # 设置指定位置 'hello world' >>> "{1} {0} {1}".format("hello", "world") # 设置指定位置 'world hello world'
5. 常用方法
- str.strip() str.lstrip() str.rstrip(',') # 去空格及特殊符号
- str.split() # 分割字符串,返回字串串列表,默认以空格分割
- len(str) # 返回字符串长度
- str.count() # 返回该字符串中某个子串出现的次数
- str.find() # 返回某个子串出现在该字符串的起始位置
- str.lower() # 将该字符串全部转化为小写
- str.upper() # 转为大写
- str.swapcase() # 大小写互换
- str.capitalize() # 首字母大写
- int(str) # 转成整型
- float(str) # 转成浮点型
- ord() # char->ascii
- chr() # ascii->char
6. string 模块 (2.x)
字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。
- string.capitalize() 把字符串的第一个字符大写
- string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
- string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
- string.decode(encoding='UTF-8', errors='strict') 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'
string.encode(encoding='UTF-8', errors='strict')
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'- string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
- string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
- string.format() 格式化字符串
- string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
- string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False
- string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False
- string.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False.
- string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
- string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
- string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False
- string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
- string.lower() 转换 string 中所有大写字符为小写.
- string.lstrip() 截掉 string 左边的空格
- string.maketrans(intab, outtab]) maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
- string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False
- min(str) 返回字符串 str 中最小的字母。
- max(str) 返回字符串 str 中最大的字母。
- string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
- string.swapcase() 翻转 string 中的大小写
- string.title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
- string.translate(str, del="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 del 参数中
- string.upper() 转换 string 中的小写字母为大写
- string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
- string.isdecimal() isdecimal()方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
- string.join(seq) 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
- string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
- string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
- string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
- string.rfind(str, beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
- string.rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始.
- string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
- string.rpartition(str) 类似于 partition()函数,不过是从右边开始查找.
- string.rstrip() 删除 string 字符串末尾的空格.
- string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
- string.splitlines([keepends]) 按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。
- string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值, 则在指定范围内检查.
string.center(width)
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
7.正则表达式 ( 转载自博客园 "AstralWind" )
常用函数:(re模块)
- compile() # 将正则表达式字符串编译成正则re对象
- search() # 在目标字符串中匹配正则表达式
- match() # 从目标字符串第一个字符开始匹配正则表达
search和match匹配成功返回MatchObject对象,失败返回None
>>> p = re.compile('abc') >>> p.search('zabcy') <_sre.SRE_Match object at 0x2a95659030> 不先编译成正则re对象也是可以的,上例也可以为: >>> re.search('abc','xabcy') <_sre.SRE_Match object at 0x2a95659098> compile还可加些标志位,例如:re.I(re.IGNORECASE)忽略大小写 >>> p = re.compile('abc') >>> print p.search('xAbCy') None >>> p = re.compile('abc',re.I) >>> print p.search('xAbCy') <_sre.SRE_Match object at 0x2a9565a098> search和match区别见下例: >>> p = re.compile('abc') >>> print p.search('xxxabcyyy')<_sre.SRE_Match object at 0x2a95659030> >>> print p.match('xxxabcyyy') None >>> print p.match('abcyyy') <_sre.SRE_Match object at 0x2a95659098>
- split() # 类似字符串内置函数split()
区别在于:内置split()以确定字符串分割,而正则split函数以正则表达式分割字符
例如:以空格(1个或者多个空格)分割: >>> p.split('a b c d')['a', 'b', 'c', 'd']而内置split分割的结果为: >>> 'a b c d'.split(' ')['a', 'b', '', '', 'c', '', 'd']
- findall() # 返回目标字符串中匹配正则表达式中所有子串列表
>>> p = re.compile('^([a-z]{2}):([1-9]{3}):(.+)$') >>> p.findall('as:123:a12')[('as', '123', 'a12')] 上例中正则表达式的子串为3个用括弧括起的,分别为:'[a-z]{2}'、'[1-9]{3}'、'.+', 分别被as、123、a12匹配,注意此返回的是匹配字符串元组的一维列表。