[Python金典学习]字符串处理和正则表达式
dragon76
|
1#
dragon76 发表于 2007-08-01 22:38
[Python金典学习]字符串处理和正则表达式[Python金典学习]字符串处理和正则表达式 [Python金典学习]字符串处理和正则表达式 2006/10/23 1.理解python中的文本处理 2.使用python中的字符串数据类型方法 3.处理和搜索字符串内容 4.理解和创建正则表达式 5.使用正则表达式在字符串中匹配模式 6.使用元字符、特殊序列和分组来创建复杂正则表达式 在本章介绍python的字符串和字符处理功能,并掩饰如何用正则表达式在文本中搜索模式。利用 本章的技术,可开发文本编辑器,字处理程序,页面布局软件,计算机排版系统以及其他文字处 理软件。以前各章已经展示了一些字处理功能。本章要扩充这方面的信息,详细介绍基本字符串 数据类型提供的各种方法,以及python的re 模块所提供的强大文字处理能力。 1.字符和字符串基础 字符(数位,字母和符号,比如$\@,%和*)是python程序的基本构件。每个程序都由字符构成。 这些字符按照有意义的方式组合,表示解释器用于执行一项任务的一系列指令。每个字符都 有对应的“字符代码“(有时称为”整数序数值“)。例如,整数值122对应于字符常量”z“。python提供了 ord函数,它取一个字符作为参数,并返回该字符的字符代码。在大多数现代语言和系统中,字符值都 是根据”Unicode“字符集”建立的。Unicode是一种国际性字符集,其中包含的符号和字母比ASCII字符集 多得多。 ord("z") >>> 122 ord("\n") >>>10 python中的字符串是一种基本数据类型。记住,字符串是一种“不可变序列”,创建之后就不能改变。前面 介绍了如何使用len函数获取一个字符串的茶馆年度,如何用运算符+连接字符串,以及如何运用运算符% 格式化字符串。字符串还支持各种方法,它们可执行其他各种格式化以及处理功能。 capitalize() //首字符大小。其他任何大写字母都转换成小写。 center(width) //返回宽度为width的字符串,并让原始字符串在其中居中(两边用空格填充) count(substring[.start[,end]]) //返回substring在原始字符串中出现的次数。如果指定了start参数, 就从start位置开始搜索[开始位置为0],如果还指定了end参数,就到end位置停止。 endswitch(substring[,start[,end]]) //如果以字符串subtring 结束,就返回1,否者返回0,其他同上。 expandtabs([tabsize]) //返回一个新字符串,其中所有制表符都被替换成空格。可选的tabsize参数指定 了用于一个指表符的空格字符数,默认为8 find(substring[,start[,end]]) //返回substring在字符串中出现时的最低索引位置;如果字符串不包括该substring ,就返回-1。 如果指定了start参数,就从那个索引位置开始搜索,如果还指定了end参数,方法就在start:end 这个分片中搜索 index(substring[,start[,end]]) //搜索与find方法相同的操作,但假如在字符串中没有发现substring ,就引发一个ValueError异常。 isalnum() ....... #### string1 = "now I am here." print string1.center(50) print string1.rjust(50) print string1.ljust(50) 上面的代码是实现空白填补达到字符串要求的长度,center在两边填补,rjust右边填补,ljust左边填补。 ### string1 = "\r \n This is a test string. \t\t \n" print 'Original string:"%s"\n' %s tring1 print 'Using strips: "%s"\n' % string1.strip() print 'Using left strip: "%s"\n' % string1.lstrip() print "Using right strip: \"%s\"\n" % string1.rstrip() ###搜索字符串 在许多程序中,都有必须要在一个字符串搜索字符或字符集。例如,程序员可能希望创建一个字处理程序, 并提供文字查找功能。为执行这种任务,python提供了find和index等方法。搜索一个子字符串时,即可 判断字符串是否包含该子字符串,也可获取该子字符串的起始索引。 ################ string1 = "Test1,test2,test3,test4,test5,test6" print '"test" occurs %d times in \n]\t%s' % \ (string1.count("test"),string1) print '"test1" occurs %d times after 18th character in \n\t%s' %\ (string1.count("test",18,len(string1)),string1) #finding a substring in a string string2 = "Odd or even" print '"%s" contains "or" starting at index %d' %\ (string2,string2.find("or")) try: print '"even" index is',string2.index("even") except ValueError: print '"even" does not occur in "%s"' % string2 if string2.startswith("Odd"): print '"%s" starts with "Odd"' % string2 if string2.endswith("even"): print '"%s" ends with "even"\n' % string2 print 'Index from end of "test" in "%s" is %d' \ %(string1,string1.rfind("test")) try: print 'First occurrence of "Test" from end at index',\ string1.rindex("Test") except ValueError: print '"Test" does not occur in "%s"' % string1 string3 = "One,one,one,one,one,one" print "Original:",string3 print 'Replaced "none" with "two";',\ string3.replace("none","two") print "Replaced 3 maximum:",string3.replace("one","two",3) 4.连接和分解字符串 计算机处理代码的方式与我们阅读文字的方式相似。我们读一个句子时,大脑自然就会将它分解成单独的"字或单词" (或称"标记"),每个都能表达特定含义。这个过程称为“ 标记化”(Tokenization).Python解释器也要执行标记化操作 ,因为它会将程序语句分解成单独的程序元素,比如关键字、标识符、运算符等等。不同的标记用定界符分隔,定界 符通常是空白字符,比如空格、制表符、换行符和回车。当然,也可用其他字符来分隔标记。本书介绍的方法可进行 基于定界符的字符串分解与连接。 ####split & join string1 = "A, B, C, D, E, F" print "String is:",string1 print "Split string by spaces:",string1.split() print "Split string by commas:",string1.split(",") print "Split string by commas,max 2:",string1.spliat(",",2) list1 = ["A", "B", "C", "D", "E", "F"] string2 = "__" print "List is:",list1; print 'Joining with "%s":%s' \ % (string2,string2.join(list1)) print 'Joining with "-.-":',"-.-".join(list1) 针对一个标记列表,join方法可用预定义的定界符来合并列表。 性能提示:构建复杂字符串时,效率更高的一种做法是将不同组件包括到一个列表中,再用join方法 汇总字符串,而不要使用连接运算符(+)。 6.正则表达式 字符串方法 允许程序查找一个特定的子字符串。例如,要想判断字符串中是否包含一个代表星期几的字符串 ("Monday","Tuesday","Wednesday"等等),程序可为每个子字符串都调用字符串方法find。换言之,程序要 调用7次find方法,才能检查完从周一到周日的所有可能,对于更复杂的搜索,程序可能要调用许多次的find 方法。显然,这不是一个高效的解决方案。为此,“正则表达式”(Regular Expression)提供了更高效、功能 更强的解决方案。所谓正则表达式,实际是一个“文本模式”(Text Pattern)用于查找与模式相匹配的子字符 串。 import re testStrings = ["Hello World","Hello world!","hello world"] expressions = ["hello","Hello","world"] for string in testStrings: for expression in expressions: if re.search(expression,string): print expression,"found in string",string else print expression,"not found in string",string |