Python 的字符串处理

在内容开始之前,先来提出这样的设想,根据以往的经验(如果你学习过一门编程语言的话),我们对一个字符串的操作有哪些可能,尽可能的列举出来,然后再来对比一下在Python中是如何做的。比如,可能想到的字符串操作有:字符串连接,字符串拷贝,字符串比较,字符串截取,字符串大小写转换等等。有了这些设想之后,再来看看Python是如何来实现的。


1. 字符串的基本操作

  1) 字符串的表现方式:'abc', "abc", '''abc, """abc""",  都可用来表式字符串: abc。当然三引号更多的用来做文档注释。

  2) “原”字符串与Unicode字符串:r"This is String",在字符串前加r或R,表示该字符串是一个“原”字符串,“原”字符串中的转义字符功能将无效,但不能以转义字符结尾,如:

       r'abc\'  这是个语法错误(SyntaxError: EOL while scanning string literal),Python 不允许以'\' 来结束字符串,即使是“原”字符串的情况下。如果一定要产生以 \ 结尾的字符串,

       就使用 + 拼接:r'abc' + '\' 这样产生的字符串结果是:abc\

       如果在字符串前加u或U,则是将字符串转换为Unicode字符串,如:u'Hello\u0020World',字符串中的 \u0020 Unicode码对应的ASCII码是空格。

  3) 字符串的切片方式,字符串是由字符序列组成,所以可以使用切片来访问字符串:

str = 'My String'
str[3:]
str[:3]

   4) 字符串遍历, for i in str: print i,  

        或者用list 方法,将字符串的构建成一个列表,每个字符对应列表的每个元素,list[str]

   5) 统计目标字符串在源字符串中出现的次数:haystack.count('needle'),haystack 是源字符串对象,'needle' 是目标字符串,它用来统计 needle 在haystack 中出现的次数。

   6) 字符串的打散与拼接:split(), join()

str  = 'Hello,World.'
str.split(',')   #以',' 为分隔符,将字符串打散,并以列表形式返回结果,返回的结果中不包含分隔符

str = 'a+b,c'
'+'.join(str)  # 以'+' 为分隔符,将每一个迭代的元素分隔再连接,返回的结果中包含该分隔符。这里返回:'a+++b+,+c',a,b中间的第1,3个'+'是连接符,而第2个才是原字符的'+',后面同理
l = ['a', 'b', 'c']
','.join(l)   # 返回 'a,b,c',除了字符串,列表内的元素也可以连接 ,其实元组也可以用来join的,但要求一点是所有的元素类型必须是字符型。

   7) 字符串比较,要比较两个字符串的大小,或者是否相等,可直接使用逻辑运算符比较:

a = 'abc'
b = 'abC'
a > b  # True

a = 123
b = '123'
a > b  # False

a = '1234'
b = '1234'
a == b # True
a is b # True

id(a)  # 152699840, a, b 两个内存地址一样,它们引用了内存中同一个字符串常量
id(b)  # 152699840

    8) 字符串截取:切片。对切片的理解就是:[i: j],从偏移量i开始,直到但不包括偏移量j的内容。

a =  'hello world.'
a[:10]  # 'hello worl'
a[3:]   # 'lo world.'
a[:]    # 'hello world.',取整个字符串
a[:-1]  # 'hello world',取首字符到倒数第1个字符,但不包含倒数第一个字符
    9) 字符串反转

str = 'hello world'
str[::-1]  # 逐字反转,返回 'dlrow olleh'
' '.join(str.split()[::-1])  # 逐词反转,返回'world hello'
' '.join(reversed(str.split())) # 功能同上 

   10) 字符与ASCII码之间的转换:ord, chr。ord() 将字符转换成ASCII码,chr() 是将ASCII码转换为字符

ord('a')  # 返回ASCII码:97
chr(97)  # 返回ASCII码97对应的字符:a



2. 借助内省

     在不清楚字符或忘记字符串的某个方法时,可以用Python的内省功能:dir()函数,dir函数列出字符串当前可用的方法,但这只列出方法名,想知道具体方法功能描述,可用 help()函数,如:

str = 'abc'
dir(str)  # 列出当前字符串可用方法名
help(str.upper)  # 显示字符串upper()方法的功能

    还可以查询Python的documentation:https://www.python.org/doc/

3. 判断是否为类字符串

要判断一个对象是否为类字符串,用两种方法:

1) 使用basestring类的内建方法instance()。注:basestring 类是str和unicode的父类,这个类不能被调用或实例化,只能用来判断一个对象是否是str或unicode的实例。

def isString(var):
    return isinstance(var, basestring)

isString('a')    # True
由于basestring类不包含 UserString类,所以,如果字符串是由UserString类实例化的,就不灵了!

import UserString
str = UserString.UserString('abc')
isString(str)   # False

2) 使用鸭子判断法。注:鸭子判断法:如果它走路像鸭子,叫声也像鸭子,我们就认为它是鸭子。按我们日常生活的逻辑去理解其实就是按照对象特征去归类。

def isStringLike(var):
    try: var + ''
    except: return False
    else: return True

isStringLike('a')  # True
str = UserString.UserString('abc')
isStringLike(str)  # True

以上部分内容参考《Python CookBook》

你可能感兴趣的:(Python)