Python 字符串处理函数(二)



文章目录

  • Python 字符串处理函数(二)
  • 四、文本模式匹配和查找
  • 五、文本查找和替换
  • 六、实现最短文本匹配
  • 七、处理 Unicode文本
  • 八、删除字符串中的字符



  本篇在Python 字符串处理函数(一)的基础上,继续讲解 Python字符串处理函数的知识。


四、文本模式匹配和查找

  如果只是相要匹配简单的文字,只需要使用内置模块string中的函数str.find()、str.endswith()、str.startswith()即可实现。例如在下面的实例中,使用内置模块实现文本模式匹配和查找的过程:

text = 'yes, but no, but yes, but no, but yes'
text == 'yeah'
#开头测试匹配
print(text .startswith('yes'))
#结尾测试匹配
print(text.endswith('no'))
#搜索第一次出现的位置
print(text.find ('no'))

  执行后会输出:

python 字符串内存分配 python内置字符串处理函数_python 字符串内存分配

五、文本查找和替换

  在Python程序中,如果只是想实现简单的文本替换功能,只需使用内置模块string 中的函数replace()即可。函数replace()的语法格式如下所示:

str.replace(old, new[,max])

 ●old: 将被替换的子字符串;
 ●new: 新字符串,用于替换old子字符串;
 ●max:可选字符串,替换不超过max次。
  函数 replace()能够把字符串中的old(旧字符串)替换成ne(新字符串),如果指定第三个参数max,则替换不超过 max次。例如在下面的实例中,演示了使用函数replace()实现文本替换的过程:

str = "www.aoteman.net"
print("奥特曼新地址:",str)
print("奥特曼新地址:",str.replace ("aoteman.com","www.aoteman.com"))
str= "this is string xample....hehe!!!"
print (str.replace ("is","was",3))

  执行后会输出:

python 字符串内存分配 python内置字符串处理函数_python 字符串内存分配_02

六、实现最短文本匹配

  当在Python程序中使用正则表达式对文本模式进行匹配时,被识别出来的是最长的可能匹配。要想将匹配结果修改为最短的匹配,此时需要用到正则表达式的知识。例如在下面的实例中,演示了使用正则表达式实现最短文本匹配的过程:

import re
str_pat = re.compile(r'\"(.*)\"')
text1 = '计算机回复说"no."'
print (str_pat.findall (text1))
text2 = '计算机回复说"no." 手机回复说 "yes."'
print (str_pat.findall (text2))
str_pat = re.compile(r'\"(.*?)\"')
print (str_pat.findall (text2))

  第二行中的模式r'\"(.*)\"'想去匹配包含在引号中的文本,但是,星号“ * ”在正则表达式中采用的是贪心策略,所以匹配过程是基于找出最长的可能匹配来进行的。

  第六行在 text2的掩饰代码中,错误地匹配成两个被引号包围的字符串。

  倒数第二行在模式中的星号“ * ”后面加上问号“?”修饰符,这样匹配过程就不会以贪心方式进行,这样就会生成出最短的匹配。

  执行后会输出:

python 字符串内存分配 python内置字符串处理函数_归一化_03

七、处理 Unicode文本

  当在Python程序中处理Unicode字符串时,需要确保所有的字符串都拥有相同的底层表示。在 Unicode字符串中,有一些特定的字符可以被表示成多种合法的代码点序列。例如在下面的实例中,演示了Unicode字符串的代码点序列表示方法:

s1 = 'I Love Python\u00f1o'
s2 = 'I Love Pythonn\u0303o'
#(a) Print them out (usually looks identical)
print (s1)
print (s2)
# (b) Examine equality and length
print('s1 == s2', s1 == s2)
print(len(s1),len(s2))

  在上述代码中,将字符串文本“I Love Pythoño”以两种形式显示出来。第一种使用的是字符“n”的全组成(U+00F1)形式,第二种使用的是拉丁字母“n” 紧跟着一个“~”组合而成的字符(U+0303) 形式。执行后会输出:

python 字符串内存分配 python内置字符串处理函数_ico_04

  在Pyhon程序中,对于一个使用比较字符串的程序来说,因为同一个文本拥有多种不同的表示形式,这个问题给开发者带来了极大的困扰。为了解决这个问题,需要先将文本统一表示为一个规范形式, 这在pyhon 中通常通过模块uicodedata实现。
  在Python语言中,通过使用模块uicodeda中的函数normalize()实现归一化操作。 归一化的目标是把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。首先归一化是为了后面数据处理的方便,其次是保证程序运行时收敛加快。归一化的具体作用是归纳统样本的统计分布性。归一化在0~ 1之间是统计的概率分布,归一化在某个区间上是统计的坐标分布。归一化有同一、统一和合一的意思。
  注意:归一化的目的简而言之是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系;或是为了作图,原来很难在一张图 上作出来,归一化后就可以很方便地给出图上的相对位置等。   例如在下面的实例中,演示了使用函数normalize()归一化Unicode 字符串的过程:

import unicodedata
s1 = 'I Love Python\u00f1o'
s2 = 'I Love Pythonn\u0303o'
n_s1 = unicodedata.normalize('NFC', s1)
n_s2 = unicodedata.normalize('NFC', s2)
print('n_s1 == n_s2',n_s1 == n_s2)
print(len(n_s1),len(n_s2))
#标准化分解和剥离
t1 = unicodedata.normalize('NFD', s1)
print(''.join(c for c in t1 if not unicodedata.combining(c)))

  在上述代码中,函数normalize()的第一个参数指定了字符串应该如何完成规范表示。为了从某些文本中删除所有的音符标记,

进行搜索或匹配处理。执行后会指出

python 字符串内存分配 python内置字符串处理函数_字符串_05

八、删除字符串中的字符

  在Pyhon程序中,如果想在字符串的开始、结尾成中间删除构不需要的字符或空格,可使用内置模块string 中的函数strip()从字符串的开始和结尾处去掉字符。函数lstrip()和rstrip()可以分别从左侧或从右侧开始执行删除字符的操作。
  (1)函数strip()
  函数srip()的功能是删除字符串头尾指定的字符(默认为空格),语法格式如下所示:

str.strip([chars]);

  参数chars表示删除字符串头尾指定的字符。
  (2)函数lstrip()
  (2)函数lstrip()的功能是截取掉字符串左边的空格或指定字符,其语法格式如下所示:

str. lstrip([chars])

  参数chars用于设置截取的字符,返回值是截掉字符串左边的空格或指定字符后生成的新字符串。
  (3)函数rstrip()
  函数rstrip()的功能是删除string字符串末尾的指定字符(默认为空格),语法格式如下所示:

str.rstrip([chars])

  参数chars用于指定删除的字符(默认为空格),返回值是删除string字符串末尾的指定字符后生成的新字符串。
  例如在下面的实例中,演示了使用上述三个函数删除字符串字符的过程:

str = "this is string example....wow!!!    "
print( str.lstrip() )
str = "88888888this is string example....wow!!!888888"
print( str.lstrip('8') )
str1 = "    this is string example...wow!!!     "
print (str1.rstrip( ))
str2 = "*****this is string exapmp.....w*******"
print (str2.rstrip('*'))
str3 = "    this is string example....wow!!!    "
print( str3.lstrip() )
str3 = "8888888this is string example... wow!!!888888"
print( str3.lstrip('8') )

  执行后会输出:

python 字符串内存分配 python内置字符串处理函数_python_06


  读者需要注意的是,上述删除字符的操作函数不会对位于字符串中间的任何文本起作用。