zoukankan      html  css  js  c++  java
  • python字符串及正则表达式[转]

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

    字符串:

    正则表达式

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

    untitled

    注意事项:

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

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

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

    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"w+",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 s S 取决于当前区域设定
    • U(UNICODE): 使预定字符类 w W  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

  • 相关阅读:
    公用表表达式(CTE)的递归调用
    c# 如何让tooltip显示文字换行
    实战 SQL Server 2008 数据库误删除数据的恢复
    SQL SERVER数据库中 是否可以对视图进行修改删除
    asp.net中实现文件批量上传
    sql server 2008学习2 文件和文件组
    sql server 2008学习3 表组织和索引组织
    sql server 2008学习4 设计索引的建议
    sql server 2008学习10 存储过程
    .net 调用 sql server 自定义函数,并输出返回值
  • 原文地址:https://www.cnblogs.com/langren1992/p/5925246.html
Copyright © 2011-2022 走看看