正则表达式

正则表达式的三大功能

1.匹配,2:提取,3:替换(sub)

一.普通字符(a-z)


二.元字符(特殊字符)有7类:


1.字符集(以单个字符划分)以[]表示,[abf]:或者a或者b或者f

  [a-z]:匹配a-z之间的字符
  [^a-z]:匹配不在a-z之间的字符。


​ 2.概括字符集:

   \d  :匹配数字;[0-9]

​   \w:表示该位置上的字母,数字或者下划线; == [A-Za-z0-9_ ]


​    \s:表示该位置上是不可见字符(空格、制表符\t、垂直制 表符\v、回车符\r、换行符\n、换页符\f)== [\f\n\t\r\v]

  . 匹配任意字符,不包括换行符。

  


​ 3.数量词有{3}:该字符出现三次/ {3-8}:该字符出现3-8次;

 

  限定符(可作为数量词来记忆):
​    +(1-n):+前面的字符可以出现多次;eg:可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)
​   ?(0-1):?前的字符不出现或者只出现一次;eg:colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
​    *(0-n):*前面的字符出现0次或者出现多次;eg:runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。

​   .  :在默认模式,匹配除了换行的任意字符。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符
   .* :表示匹配除换行符外的任意字符

 *  , + :是贪婪的。在他们的后面加上?就可以实现最小匹配,即非贪婪。

​ 4.组:提取其中某一连续的满足 某个条件的字符串


​    (\d+),增加了()
​ 5.match:在用match方法的时候有一个需要注意的地方,很重要,非常容易导致出错,

 


​    match方法是从content第一个字符开始去匹配\d,如果未匹配到,直接就返回None。这里因为content第一个字符不是数字,所以直接返回None
​ 6.贪婪跟非贪婪


​   .*?表示非贪婪模式:是尽可能少地去匹配字符/匹配的越少,得到的结果越多
  ​ .*表示贪婪模式,尽可能多的去匹配字符,python默认采取的是贪婪模式/匹配的越多得到的结果越少


​ 7.search方法和sub方法与match方法的比较:


​    使用match方法,会从content的开头去匹配\d,没有匹配到就直接返回None 了。
​   而search方法也是从头开始匹配,只要匹配到有一个字符符合\d,就直接返回了,不会继 续往下匹配。
  sub方法:替换。
​    sub方法设计的精妙之处,就是sub的第二个参数可以是一个函数。就在于当你拿到匹配结果的时候,不一定要将它替换成固定的字符串,
​    你可以传递一个函数,在函数中对匹配结果进行逻辑处理,这样主动权就交到了用户手上,用 户可以随便处理

8.\ :表示转义字符,将一个字符标记为特殊的字符,例如n匹配n,\n匹配换行符

9:

 

  ^ 为匹配输入字符串的开始位置。

  [0-9]+匹配多个数字, [0-9] 匹配单个数字,+ 匹配一个或者多个。

  abc$匹配字母 abc 并以 abc 结尾,$ 为匹配输入字符串的结束位置。

 

 

10:定位符

  ^ : 匹配输入字符开始的位置,在中括号内则表示非的意思。

  $ :匹配输入字符结束的位置。 

注意:不能将限定符与定位符一起使用。

三:注意

1.正则表达式中的or有两种表达方法:1:  |   ,2:[]后面可以与其他字符串连接。
2.[0-9]等价于[0123456789]

 

posted on 2021-05-15 17:20  看不见的风  阅读(81)  评论(0)    收藏  举报

导航