1. '''
  2. 正则表达式对象的sub(repl,string[,count=0])和subn(repl,string[,count=0])方法用来实现字符串替换功能
  3. '''
  4. example='''Beautiful is better than ugly.
  5. Explicit is better than implicit.
  6. Simple is better tha complex.
  7. Complext is better than nested.
  8. Sparse is better than dense.
  9. Readability counts.
  10. '''
  11. pattern = re.compile(r'\bb\w*\b',re.I) #正则表达式对象,匹配以b或B开头的单词
  12. print(pattern.sub('*',example)) #将符合条件的单词替换为*
  13. # * is * than ugly.
  14. # Explicit is * than implicit.
  15. # Simple is * tha complex.
  16. # Complext is * than nested.
  17. # Sparse is * than dense.
  18. # Readability counts.
  19. print(pattern.sub('*',example,1)) #只替换1次
  20. # * is better than ugly.
  21. # Explicit is better than implicit.
  22. # Simple is better tha complex.
  23. # Complext is better than nested.
  24. # Sparse is better than dense.
  25. # Readability counts.
  26. print(re.compile(r'\bb\w*\b')) #匹配以字母b开头的单词
  27. print(pattern.sub('*',example,1)) #将符合条件的单词替换为*,只替换1次
  28. # * is better than ugly.
  29. # Explicit is better than implicit.
  30. # Simple is better tha complex.
  31. # Complext is better than nested.
  32. # Sparse is better than dense.
  33. # Readability counts.
  34. '''
  35. 正则表达式对象呢的split(strign[,maxsplit = 0])方法用来实现字符串分隔.
  36. '''
  37. example = r'one,two,three.four/five\six?seven[eight]nine|ten'
  38. pattern = re.compile(r'[,./\\?[\]\|]') #指定多个可能的分隔符
  39. print(pattern.split(example))
  40. # ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']
  41. example = r'one1two2three3four4five5six6seven7enght8nine9ten'
  42. pattern=re.compile(r'\d+')
  43. print(pattern.split(example))
  44. # ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'enght', 'nine', 'ten']
  45. example = r'one two three four,five.six.seven,enght,nine9ten'
  46. pattern=re.compile(r'[\s,.\d]+') #允许分隔符重复
  47. print(pattern.split(example))
  48. ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'enght', 'nine', 'ten']
  49.  
  50. '''
  51. match对象:
  52. 正则表达式模块或正则表达式对象的match()方能发和search()方法匹配成功后都会返回math()对象。match对象的主要方法有grou()(返回匹配的
  53. 一个或多个子模式内容)、groups()(返回一个包含匹配的所有子模式内容的元组)、groupdict()(返回包含匹配的所有命名子模式内容字典)、start()
  54. (返回指定子模式内容的起始位置)、end()(返回指定子模式内容的结束位置的前一个位置)、span()(返回一个包含指定子模式内容起始位置和结束前一个位置
  55. 的元组)等。下面的代码使用几种不同的方法来删除字符串中指定的内容:
  56. '''
  57. email='tony@tiremove_thisger.net'
  58. m=re.search('remove_this',email) #使用search()方法返回的match对象
  59. print(email[:m.start()]+email[m.end()]) #字符串切片
  60. print(re.sub('remove_this','',email)) #直接使用re模块的sub()方法
  61. # tony@tiger.net
  62. print(email.replace('remove_this','')) #也可以直接使用字符串替换方法
  63. # tony@tiger.net
  64.  
  65. m=re.match(r"(\w+)(\w+)","Isaac Newton,physicist")
  66. print(m.group(0)) #返回整个模式内容
  67. # Isaac
  68. print(m.group(1)) #返回第一个子模式内容
  69. # Isaa
  70. print(m.group(2))
  71. # c
  72. print(m.group(1,2))
  73. # ('Isaa', 'c')
  74.  
  75. '''
  76. 下面的代码演示了子模式扩展语法的用法
  77. '''
  78. m=re.match(r"(?P<first_name>\w+)(?P<last_name>\w+)","Malcolm Reynolds")
  79. print(m.group('first_name')) #使用命名的子模式
  80. # Malcolm
  81. print(m.group('last_name'))
  82. # m
  83. m=re.match(r'(\d+)\.(\d+)','24.1632')
  84. print(m.groups()) #返回所有匹配的子模式(不包括第0个)
  85. # ('24', '1632')
  86. m=re.match(r'(?P<first_name>\w+)(?P<last_name>\w+)','Malcolm Reynolds')
  87. print(m.groupdict()) #以字典形式返回匹配的结果
  88. # {'first_name': 'Malcol', 'last_name': 'm'}
  89. exampleString = '''There should be one-and preferably only one-obvious way to do it.
  90. Although that way may not be obvioud at first unless you're Dutch.
  91. Now is better than never.
  92. Athought never is often better than right now.
  93. '''
  94. pattern =re.compile(r'(?<=\w\s)never(?=\s\w)') #查找不在橘子开头和结尾的never
  95. matchResult = pattern.search(exampleString)
  96. print(matchResult.span())
  97. # (168, 173)
  98. pattern =re.compile(r'(?<=\w\s)never') #查找位于句子末尾的单词
  99. mathResult=pattern.search(exampleString)
  100. print(mathResult.span())
  101. # (152, 157)
  102.  
  103. pattern=re.compile(r'(?:is\s)better(\sthan)') #查找前面是is的better than组合
  104. matchResult=pattern.search(exampleString)
  105. print(matchResult.span())
  106. # (137, 151)
  107. print(matchResult.group(0))
  108. # is better than
  109. print(matchResult.group(1))
  110. # than
  111. pattern=re.compile(r'\b(?i)n\w+\b') #查找以n或N字母开头的所有单词
  112. index=0
  113. while True:
  114. matchResult=pattern.search(exampleString,index)
  115. if not matchResult:
  116. break
  117. print(matchResult.group(0),':',matchResult.span(0))
  118. index=matchResult.end(0)
  119. # not : (88, 91)
  120. # Now : (133, 136)
  121. # never : (152, 157)
  122. # never : (168, 173)
  123. # now : (201, 204)
  124. pattern=re.compile(r'(?<!not\s)be\b') #查找前面没有单词not的单词be
  125. index=0
  126. while True:
  127. matchResult=pattern.search(exampleString,index)
  128. if not matchResult:
  129. break
  130. print(matchResult.group(0),':',matchResult.span(0))
  131. index=matchResult.end(0)
  132. # be : (13, 15)
  133. print(exampleString[13:20] ) #验证一下结果是否准确
  134. # be one-
  135. pattern=re.compile(r'(\b\w*)(?P<f>\w+)(?P=f)\w*\b') #匹配有连续想念痛字母的单词
  136. index = 0
  137. while True:
  138. matchResult=pattern.search(exampleString,index)
  139. if not matchResult:
  140. break
  141. print(matchResult.group(0),':',matchResult.group(2))
  142. index=matchResult.end(0)+1
  143. # unless : s
  144. # better : t
  145. # better : t
  146. print(s)
  147. # aaa bb c d e fff
  148. p=re.compile(r'(\b\w*(?P<f>\w+)(?P=f)\w*\b)')
  149. print(p.findall(s))
  150. [('aaa', 'a'), ('bb', 'b'), ('fff', 'f')]

Python_正则表达式二的更多相关文章

  1. [.net 面向对象程序设计进阶] (3) 正则表达式 (二) 高级应用

    [.net 面向对象程序设计进阶] (2) 正则表达式 (二)  高级应用 上一节我们说到了C#使用正则表达式的几种方法(Replace,Match,Matches,IsMatch,Split等),还 ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. 第五篇、javascript正则表达式二

    一.内容概要 1)创建着呢规则表达式对象的两种方法 2)正则表达式的常用属性和方法 3)string对象常用方法中可以使用正则表达式 4)ES中其他预定义的对象:Math.Date.Number.Bo ...

  4. Python for Informatics 第11章 正则表达式二(译)

    注:文章原文为Dr. Charles Severance 的 <Python for Informatics>.文中代码用3.4版改写,并在本机测试通过. 11.1 正则表达式的字符匹配 ...

  5. javascript 正则表达式(二)

    /* 正则表达式方法:test(),exec(),String对象方法:match(),search(),replace(),split() 1.test()方法: 用法:  regexp对象实例.t ...

  6. python中关于正则表达式二

    2.2 反向引用 \1, \2... 表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来.在获取匹配结果的时候,小括号包含的表达式所匹配到的字符 ...

  7. javascript正则表达式(二)——方法

    正则表达式规则见:http://www.cnblogs.com/wishyouhappy/p/3756812.html,下面说明相关方法 String相关方法 概括: search() replace ...

  8. python_正则表达式

    re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. 函数语法: \[re.match(pattern, strin ...

  9. Python_正则表达式一

    ''' 常用的正则表达式元字符 . 匹配换行符以外的任意单个字符 * 匹配位于'*'之前的字符或子模的0次或多次出现 + 匹配位于'+'之前的字符或子模式的1次或多次出现 - 用在[]之内用来表示范围 ...

随机推荐

  1. R基础学习

    R基础学习 The Art of R Programming 1.seq 产生等差数列:seq(from,to,by) seq(from,to,length) for(i in 1:length(x) ...

  2. [转]高级SQL注入:混淆和绕过

    ############# [0×00] – 简介[0×01] – 过滤规避(Mysql)[0x01a] – 绕过函数和关键词的过滤[0x01b] – 绕过正则表达式过滤[0×02] – 常见绕过技术 ...

  3. DataLoad命令

    Dataload常用命令 Dataload命令符 说明 Tab  或\{tab} 键盘Tab键,下一个单元 *UP  或\{UP} 键盘上 *DN  或\{DOWN} 键盘下 *LT  或\{LEFT ...

  4. utl_file包的使用

    首先看一下oracle 脚本 /* # $Header: HTMomse12.sql 12.0.4 20121015 Support $ #+============================= ...

  5. LeetCode之“数学”:Plus One

    题目链接 题目要求: Given a non-negative number represented as an array of digits, plus one to the number. Th ...

  6. HBase提供的工具

    1 .压缩测试工具   hbase org.apache.hadoop.hbase.util.CompressionTest   1G数据不同的压缩算法得到的结果 +----------------- ...

  7. nasm汇编一些需要注意的地方

    经常用msam或tasm的童鞋一下转换到nasm下可能觉得不怎么适应,它们应该先去晓习一下gas的语法,然后就适应了-that's only a joke! :) section .data v101 ...

  8. ruby 2.x.x之新特性散谈

    ruby入门看的是经典的<ruby编程语言>,可是那描述的是v1.9的老版本啊!下面聊一下ruby2.x.x的新特性,x是0-n都有可能啊. 1.关键字参数(Keyword argumen ...

  9. Android开发学习总结(二)——使用Android Studio搭建Android集成开发环境

    有很长一段时间没有更新博客了,最近实在是太忙了,没有时间去总结,现在终于可以有时间去总结一些Android上面的东西了,很久以前写过这篇关于使用Android Studio搭建Android集成开发环 ...

  10. MOOS学习笔记2——HelloWorld回调

    MOOS学习笔记2--HelloWorld回调 例程 #include "MOOS/libMOOS/Comms/MOOSAsyncCommClient.h" bool OnConn ...