python基础学习(三)--正则表达式

正则表达式基础

一:+ 、*  、?的用法

  • xiao+ye,+ 号前面的字符出现1次或多次,如可匹配xiaoye,xiaoooooye;

  • xiao*ye,* 号前面的字符出现0次、1次或多次,如可匹配xiaye,xiaoye,xiaoooooye;

  • xiao?ye ,? 问号前面的字符出现0次或1次,如可匹配xiaye,xiaoye。

  • ?也可以用来实现非贪婪匹配,如:

This is a H1 Title!

对上述代码段,若使用+或*为贪婪匹配,即尽可能匹配多的字符:

        <.*>   会匹配整段:

This is a H1 Title!

通过在 *、+ 或 ? 限定符之后放置 ?,使该表达式从"贪心"表达式转换为"非贪心"表达式或者最小匹配

        <.*?>  则只匹配到:

   .   匹配除了\n换行符之外的任一单字符

 

二:\number (eg. \1   \2  .... \99) 的用处

对一个正则表达式模式或部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。可以使用非捕获元字符 ?:、?= 或 ?! 来重写捕获,忽略对相关匹配的保存。

反向引用的最简单的、最有用的应用之一,是提供查找文本中两个相同的相邻单词的匹配项的能力。以下面的句子为例:

Is is the cost of of gasoline going up up

查找重复的单词:

var str = "Is is the cost of of gasoline going up up";

var patt1 = /\b([a-z]+) \1\b/ig; 

document.write(str.match(patt1));

捕获的表达式,正如 [a-z]+ 指定的,包括一个或多个字母。正则表达式的第二部分是对以前捕获的子匹配项的引用,即,单词的第二个匹配项正好由括号表达式匹配。\1 指定第一个子匹配项。

单词边界元字符确保只检测整个单词。否则,诸如 "is issued" 或 "this is" 之类的词组将不能正确地被此表达式识别。

正则表达式后面的全局标记 g 指定将该表达式应用到输入字符串中能够查找到的尽可能多的匹配。

表达式的结尾处的不区分大小写 i 标记指定不区分大小写。

多行标记指定换行符的两边可能出现潜在的匹配。

输出结果为: Is is,of of,up up

三:元字符含义大全

http://www.runoob.com/regexp/regexp-metachar.html

四:正则表达式在线测试及常见使用正则表达式

https://c.runoob.com/front-end/854

Python3中的正则表达式

一:re模块

#  span()函数 返回一个元组,表示(start, end) 

re.match(pattern, string, flags=0) :尝试从字符串的起始位置匹配一个模式,如果不是从起始位置匹配成功的话,match()就返回none

re.search(pattern, string, flags=0):扫描整个字符串并返回第一个成功的匹配。

这两个方法的参数一样:

  • pattern : 匹配的正则表达式。
  • string : 要匹配的字符串。
  • flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写(re.I),多行匹配(re.M)等等。

注意两者的区别。

re.sub(pattern, repl, string, count=0):用于替换字符串中的匹配项。

参数:

  • pattern : 正则中的模式字符串。
  • repl : 替换的字符串,也可为一个函数。
  • string : 要被查找替换的原始字符串。
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

你可能感兴趣的:(自学ing)