python字符串及正则表达式[转]

原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html

字符串:

正则表达式

正则表达式元字符与语法图:

python字符串及正则表达式[转]

注意事项:

正则表达式的嵌套需要使用“()”,例如(\d\d\d){2}代表的是六个数字\d\d\d{2}代表的是4个数字。

正则表达式每个分组会自动拥有一个组号,从左向右分别表示为\1,\2…例如(abc)\1代表匹配abc两次。

三种间隔符号——“^”(代表匹配字符串首部子串),“$”(代表匹配结束部分的子串),“\b”(分隔单词)

findall() sub() subn()创建副本,不改变原字符串

sys.re模块使用:

findall(pattern,string,flags = 0);   搜索string,以列表形式返回全部能匹配的子串,例子:

s = "HELLO WORLD" 
print re.findall(r"^hello",s) 
print re.findall(r"^hello",s,re.I) 
print re.findall("WORLD$",s) 
print re.findall(r"wORLD$",s,re.I) 
print re.findall(r"\b\w+\b",s)

sub(pattern,repl,string,count = 0);使用repl替换string中每一个匹配的子串后返回替换后的字符串。 当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。 当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 count用于指定最多替换次数,不指定时全部替换。subn(pattern,repl,string,count = 0);  返回 (sub(repl, string[, count]), 替换次数)。例子:

s = "hello world" 
print re.sub("hello","hi",s)  #不改变原字符串 
print re.sub("hello","hi",s[-4:]) 
print re.sub("world","China",s[-5:])

s = '你好 WORLD2' 
print "匹配字母数字:" + re.sub(r"\w",'hi',s) 
print "替换次数:" + str(re.subn(r"\w",'hi',s)[1]) 
print "匹配非字母数字:" + re.sub(r"\W",'hi',s) #这里一个汉字是两个字符 
print "替换次数:" + str(re.subn(r"\W",'hi',s)[1]) 
print "匹配空白字符:" + re.sub(r"\s",'hi',s) 
print "匹配数字字符:" + re.sub(r"\d",'hi',s) 
print "匹配任意字符:" + re.sub(r".",'hi',s)

re模块规则选项:

  • re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
  • M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
  • S(DOTALL): 点任意匹配模式,改变'.'的行为
  • L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
  • U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
  • X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

pattern对象的使用:

1 正则表达式的解析十分费时,若多次使用findall等函数进行匹配可能会降低效率,若多次使用同一规则匹配字符串,可以使用compile()函数进行预编译,compile()函数返回pattern对象,示例如下:

s = "1ab23bv456"
p = re.compile(r"\d+")
print p.findall(s);
print p.pattern

2 函数compile()通常和match(),search(),group()一起使用,对含有分组的正则表达式进行解析。含分组的表达式从左向右计数,第一个圆括号出现的是第一组,以此类推,但是0号组表示用于匹配整个正则表达式的结果。match()和search()方法返回match对象,match对象提供了一系列的方法和属性来管理匹配的结果。

p = re.compile(r"(abc)\1")
m = p.match("abcabcabc")
print m.group(0)
print m.group(1)
print m.group()

p = re.compile(r"(?P<one>abc)(?P=one)")
m = p.search('abcabcabc')
print m.group('one')
print m.groupdict().keys()
print m.groupdict().values()
print m.re.pattern

上一篇:SpringMVC+Spring+MyBatis+Maven调整【转】


下一篇:好用到没朋友的大数模板(c++) 2014-10-01 15:06 116人阅读 评论(0) 收藏