字符串有切片索引功能。
- 索引,可以通过字符串后面加上索引数字访问单个字符串。
- 切片,可以通过字符串后面加个多个索引参数获取区间字符串。
s = "use python user something"
#索引
s[0] //u
s[-1] //g
#切片
s[0,5] //use p
s[1:] //:表示到最后 结果就是se python user something
s[:] //所有字符内容
s[0:9:3] //'u h' , 获取0,9区间的字符串为'use pyhto',然后每隔3个字符取一个,第一个字符为u,第二个字符就是u后面的第三个字符,为空格,第三个字符串是空格往后第三个字符,为h,后面的不足三个,略过,加起来就是"u h"
字符串常用方法
- 字符串拼接 +
s = "use python do something"
"let us " + s // let us use python do something
- 字符串乘法 *
s * 2 //"use python do somethinguse python do something" 输出两遍s
- 全部大写 upper
>>> s.upper();
'USE PYTHON DO SOMETHING'
>>>
- 查找 find
>>> s.find('python')
4 //查找到的字符串的索引位置
- 字符串 切分成list(列表) split
>>> s.split(" ")
['use', 'python', 'do', 'something']
- list(列表)组合成字符串
>>> a = s.split(" ") //拆分成list
>>> b = "| " . join(a) //组合成字符串,以“|”分割
>>> b
'use| pyhton| do| something'
>>>
7.. 字符串替换 replace
>>> s.replace('python','php')
'use php do something'
>>>
- print输出
python3.* 使用python需要使用小括号
python2.*
>>> print "hell%s" % ('o')
hello
python3.*
>>> print ("hell%s" % ('o'))
hello
- 去除前后空格 strip
str = "hello "
str.strip() //"hello" //去除字符串的前后空格
- 获得字符串长度 len
str = "hello"
len(str) //6
字符串转义 raw
如果字符串中出现'r' 'n' 等转义字符,python可能直接执行转义操作。
>>> s = "hello \new"
>>> print s
hello
ew
>>>
这里的n就当做回车符,如果想让字符不转义,可以使用r前缀
>>> s = r"hello \new"
>>> print s
hello \new
>>>
r就是raw的简写,表示原始字符.如果不使用r前缀,也可以使用其他语言通用特性,例如两个'\'.或者字符串使用单引号
>>> s = r"hello \\new" //转义\
或者
>>> s = 'hello \new' //单引号
上述方法都可以实现
如果字符串有单引号,有双引号,有转义字符,可以使用三引号,类似php的heredoc语法结构
>>> s = """
... wokao
... bu shi ba `2121`312""
... "sdsd`'
... """
>>> s
'\nwokao \nbu shi ba `2121`312""\n"sdsd`\'\n'
unicode编码
这里有一篇很好的编码解释GB2312、GBK、GB18030 这几种字符集的主要区别是什么?
utf-8编码中,中文占3个字符。看下不同编码下在python的对比.
>>> s = "用python做些事"
>>> a = u"用python做些事"
>>> s
'\xe7\x94\xa8python\xe5\x81\x9a\xe4\xba\x9b\xe4\xba\x8b'
>>> a
u'\u7528python\u505a\u4e9b\u4e8b'
>>> len(s)
18
>>> len(a)
10
>>>
tips:如果在代码中需要使用中文字,比如注释等,需要在文件头声明编码格式
# coding: utf-8
正则表达式(re)
正则表达式为通用技术,这里有篇不错的文章适合入门. 正则表达式30分钟入门教程
常用元字符,大约包括 . ^ $ | [] * + ? d w
- “”主要用作转义,比如你要匹配的正文中有html代码<a href="http://...">,就可以使用做下转义.
- "." 匹配所有,包括字符串,数字,特殊符号,不包括回车, .* 就表示匹配所有文本
- "^ 、 $ ",^表示从这里开头,$表示匹配结尾.
-
- ? +
代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
- "|" 分支条件, exp1 | exp2,只要满足一个即表示匹配
- "[]",表示满足其中任何一个即可,比如[a,b,c] 表示匹配a或b或c
- d w d表示匹配一个数字, w表示匹配一个字符
re常用方法
- match 头部搜索
从头查找符合匹配的字符串
import re #引入re
text = "I love Python" #定义测试字符串
re.match(r"love") #此处是匹配不到的,它只会匹配开头字符串
re.match(r"I") #可以匹配到,返回一个_sre.SRE_Match对象
o = re.match(r"I")
o.group() # 输出I,也就是输出匹配的字符串
- search 全文搜索
从整个字符串中进行匹配
o = re.search(r"love") #可以匹配到,返回一个_sre.SRE_Match对象
o.start() #返回字符串匹配的开始位置
o.end() #返回字符串匹配的最后位置
o.group() #返回匹配到的字符串
search和match只会匹配第一个字符串,如果遇到重复字符串则略过
>>> text = "I love love Python"
>>> o = re.search(r"love",text)
>>> o.group()
'love'
- findall 检索全部匹配的表达式
上文的search和match只能匹配到符合表达式的第一个字符串,如果想要全部获得匹配到的字符串,就要用到findall
text = "I love love Python"
o = re.findall(r"love",text)
print o #输出匹配到的列表
注意,此处的o不再是一个SRE_Match对象,而是一个list.
- split 分割成list
此处的split和字符串的split类似
>>> text = "I love python "
>>> o = re.split(r"love",text)
>>> o
['I ', ' python '] //将字符串从"love"分开,拆分成list
- sub 字符串替换
re.sub("a","b",text); 将a替换成b
>>> text = "php java c++"
>>> o = re.sub(r"c\+\+","python",text) //此处c++需要转义
>>> o
'php java python'
正则表达式
>>> text = "php java c++"
>>>
>>> pattern = "^php" 匹配以php开头
>>> re.findall(pattern,text)
['php']
>>>
具体的匹配规则可以参数上面的 《正则表达式30分钟入门教程》
如果表达式固定,而text有多个,可以先编译表达式,然后再依次匹配,场景比如你有一个邮件list,需要一个一个进行验证
pattern = re.compile("pattern")
for i in list:
pattern.search(i) // 依次验证是否匹配