Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1351348
  • 博文数量: 334
  • 博客积分: 10302
  • 博客等级: 上将
  • 技术积分: 2986
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-12 10:17
文章分类

全部博文(334)

文章存档

2013年(1)

2012年(9)

2011年(4)

2010年(10)

2009年(24)

2008年(64)

2007年(72)

2006年(150)

我的朋友

分类: Python/Ruby

2007-08-01 22:38:23

[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)

print

#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"))

print

try:
  print 'First occurrence of "Test" from end at index',\
     string1.rindex("Test")
except ValueError:
   print '"Test" does not occur in "%s"' % string1

print

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)

 print

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
print

阅读(1266) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~