正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

一、作用

    正则表达式就是记录文本规则的代码。

二、基本操作

  python中re模块提供了正则表达式相关操作

  1、字符

     . 匹配除换行符以外的任意字符
    \w 匹配字母或数字或下划线或汉字
   \s 匹配任意的空白符
   \d 匹配数字 (\d\d表示可以匹配两位数字,以此类推)
   \b 匹配单词的开始或结束
   ^ 匹配字符串的开始     (开始的字符是指定的)
   $ 匹配字符串的结束  (末尾的字符是指定的)

  2、次数:

  * 重复零次或更多次   
  + 重复一次或更多次  
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次

三、re 模块中的方法

      .match

  .search

  .findall

  .splid

  .sub

1、match:

   match(pattern, string, flags=0)
   # pattern: 正则模型
   # string : 要匹配的字符串
   # falgs  : 匹配模式

  从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None   (从字符串第0个元素开始匹配,不会在以匹配到的元素中继续匹配,会跳过符合的元素,继续查找,他的值只会有一个)

a.无分组  

 无分组只有a.group()有意义,用来提取分组截获的字符,其中group只有在match与search中适用。   

 groups与groupdict 是需要分组的。

 匹配的值放在内存中需要group才出来  其中group(num) num可以指定 分组的序数,可以返还对应的匹配值。

import re 
ret = "abc123def "
a = re.match("a\w\w\d",ret)


print(a.group())  #abc1

b.分组

注意:groups()以元祖的方式 把带括号匹配到的结果放在一起。只提取带括号的匹配值。

     group()  匹配规则带括号与不带括号没有区别。

   groupdict()    通常与  ?P<key>  连用表示为分组指定一个key值,输出dict。


import re 
ret = "abc123def "
a = re.match("a\w\w(?P<num>\d)\d(?P<rule>\d\w)",ret)

print(a.group())   #abc123d
print(a.groups())  #(‘1‘, ‘3d‘)
print(a.groupdict()) #{‘num‘: ‘1‘, ‘rule‘: ‘3d‘}

 

import re 
ret = "sss123asd456wsd789aqdasc123asdasc123asd"
a = re.match("([a-z]*)(\d*)([a-z]*)",ret)

print(a.group())	#sss123asd
print(a.group(1))	#sss
print(a.group(2))	#123
print(a.group(3))      #asd
print(a.groups())      #(‘sss‘, ‘123‘, ‘asd‘)
print(a.groupdict())   #{}

 

二、search:

  match 是从头开始匹配,search浏览整个字符串去匹配第一个,未匹配成功返回None

  

  

  

 

  

 

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式