Menu Close

python2 学习笔记之字符串操作

字符串有切片索引功能。

  1. 索引,可以通过字符串后面加上索引数字访问单个字符串。
  2. 切片,可以通过字符串后面加个多个索引参数获取区间字符串。
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"

字符串常用方法

  1. 字符串拼接 +
s = "use python do something"
"let us " + s //  let us use python do something
  1. 字符串乘法 *
s * 2  //"use python do somethinguse python do something" 输出两遍s
  1. 全部大写 upper
>>> s.upper();
'USE PYTHON DO SOMETHING'
>>> 
  1. 查找 find
>>> s.find('python')
4  //查找到的字符串的索引位置
  1. 字符串 切分成list(列表) split
>>> s.split(" ")
['use', 'python', 'do', 'something']
  1. list(列表)组合成字符串
>>> a = s.split(" ")  //拆分成list
>>> b = "| " . join(a) //组合成字符串,以“|”分割
>>> b
'use| pyhton| do| something'
>>>

7.. 字符串替换 replace

>>> s.replace('python','php')
'use php do something'
>>> 
  1. print输出
    python3.* 使用python需要使用小括号
python2.*
>>> print "hell%s" % ('o')
hello
python3.*
>>> print ("hell%s" % ('o'))
hello
  1. 去除前后空格 strip
str = "hello "
str.strip() //"hello" //去除字符串的前后空格
  1. 获得字符串长度 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

  1. “”主要用作转义,比如你要匹配的正文中有html代码<a href="http://...">,就可以使用做下转义.
  2. "." 匹配所有,包括字符串,数字,特殊符号,不包括回车, .* 就表示匹配所有文本
  3. "^ 、 $ ",^表示从这里开头,$表示匹配结尾.
    • ? +

代码/语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

  1. "|" 分支条件, exp1 | exp2,只要满足一个即表示匹配
  2. "[]",表示满足其中任何一个即可,比如[a,b,c] 表示匹配a或b或c
  3. d w d表示匹配一个数字, w表示匹配一个字符

re常用方法

  1. 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,也就是输出匹配的字符串
  1. 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'
  1. findall 检索全部匹配的表达式
    上文的search和match只能匹配到符合表达式的第一个字符串,如果想要全部获得匹配到的字符串,就要用到findall
    text = "I love love Python"
    o = re.findall(r"love",text)
    print o  #输出匹配到的列表

注意,此处的o不再是一个SRE_Match对象,而是一个list.

  1. split 分割成list
    此处的split和字符串的split类似
>>> text  =  "I love python "
>>> o = re.split(r"love",text)
>>> o
['I ', ' python ']  //将字符串从"love"分开,拆分成list
  1. 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) // 依次验证是否匹配

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注