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

  • 相关阅读:
    开发avr单片机网络资源
    c语言中各种数据类型的长度
    REPEAT_BYTE(x)宏
    如何快速掌握man手册的使用
    如何获取内核代码的变更信息说明
    min宏的学习
    Spring对jdbc支持
    切入点表达式
    XML方式实现AOP编程
    注解方式实现AOP编程
  • 原文地址:https://www.cnblogs.com/langren1992/p/5925246.html
Copyright © 2011-2022 走看看