Python入门 —— 04字符串解析
字符串
-字符串是 Python 中最常用的数据类型。(可以说是大多数语言都常用)
1. 创建字符串
( '' 或 "" 和 '''''')(单,双和三引号)(字符串可以为空)
-单引号:包含普通字符串,可以包含双引号,不能包含特殊字符。
-双引号:可以包含单引号。
-三引号:可以包含单引号和双引号,可以包含特殊字符。三引号包含的字符串可由多行组成,一般可表示大段的叙述性字符串。(所见即所得)
str = '' (此时字符串str即为空)
str1 = 'hello'
str2 = "world"
str3 = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
Tab (\t)__str
special [\n\n] string
'''
注意:特殊字符:制表符 \t 换行符 \n
输出:
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
Tab ( )__str
special [
] string
2. 访问字符串
可用*下标*的形式访问字符串中的字符。
#!/usr/bin/python3
# _*_ coding:UTF-8 _*_
str1 = 'hello'
str2 = "world"
# 利用下标
print ("str1[1]:", str1[1]) # str1[1]: e
# [左边界:右边界] 可以取到下标1,取不到4
print ("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]: e
str2[1:4]: orl
str2[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)或浮点数 (根据显示长度)
%% 字符"%"
- 附:格式化操作符的一些辅助指令:
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
<sp> 在正数前面显示空格
# 在八进制数前面显示零('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匹配,注意此返回的是匹配字符串元组的一维列表。