Python----Python高级(正则表达式:语法规则,re库)

打印 上一主题 下一主题

主题 1024|帖子 1024|积分 3072

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、正则表达式

1.1、概念

        正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包罗平凡字符(比方,a 到 z 之间的字母)和特 殊字符(称为"元字符")。
        正则表达式使用单个字符串来描述、匹配一系列符合某个 句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。普通 的说,正则表达式就是一种语法规则,用来匹配文本中的文本。
   正则表达式非常强盛,不仅在UNIX系统中应用广泛,近二十年来,在Windows系统 中也得到极大的发展,现如今主流的操作系统包罗Linux、Unix、Windows和主流的 开辟语言包罗C/C++、Java、JavaScript、C#、Python、Go、PHP等。
  1.2、特点 

   缺点:
          正则表达式的语法可读性差
  优点:
        正则表达式通用行很强,可以或许适用于很多编程语言
  二、语法规则 

2.1、匹配什么字符

代码功能.匹配恣意1个字符(除了\n)[ ]匹配[ ]中罗列的字符\d匹配数字,即0-9\D匹配非数字,即不是数字\s匹配空白,即 空格,tab键\S匹配非空白\w匹配非特殊字符,即a-z、A-Z、0-9、_、汉字\W匹配特殊字符,即非字母、非数字、非汉字 2.2、匹配多少次

代码功能*匹配前一个字符出现0次大概无限次,即可有可无+匹配前一个字符出现1次大概无限次,即至少有1次?匹配前一个字符出现1次大概0次,即要么有1次,要么没有{m}匹配前一个字符出现m次{m,n}匹配前一个字符出现从m到n次{n,}匹配前一个字符出现n次以上 2.3、在哪里匹配

代码功能^匹配字符串开头$匹配字符串末端\b表示匹配单词边界。(比如\bword,可以匹配word、words,但不会匹配 sword) 2.4、匹配指定格式的字符

1. 使用()匹配指定格式的字符
   (ab):表示在文本中只匹配ab这两个字符,且必须相邻
  (a|b):表示在文本中匹配a大概b这两个字符,不肯定相邻。
  2. 使用[]匹配指定类别的字符串
   [abcd]:表示匹配a或匹配b或匹配c或匹配d
  [a-d]:表示匹配a或匹配b或匹配c或匹配d
  [a-zA-Z0-9]:表示匹配全部的大小写英文和数字
  [^0-9]:表示匹配除了数字之外的全部字符
  2.5、单行模式与多行模式

1. 单行模式:
        在单行模式下,.可以匹配任何的字符,包罗换行符,并且整个文本会 被以为是一个完整的文本,使用^和$只能匹配到文本的开头和末端。
2. 多行模式:
        在多行模式下,.就不可以匹配换行符了,使用^和$可以匹配到每一行 的开始和竣事。
2.6、贪婪匹配与懒惰匹配

1. 贪婪模式:指在正则表达式中的量词会尽可能多地匹配字符。
2. 懒惰模式:指在正则表达式中的量词会尽可能少地匹配字符。
2.7、?的几种用法

1. ?作为限定符,表示其修饰对象只能出现0次或1次。
2. ?放在量词前,表示将匹配模式改为懒惰匹配模式。
3. (?=pattern):表示匹配位置背面必须跟着pattern模式的字符,匹配效果并不 包罗这个模式的字符串。
4. (?!pattern):表示匹配位置背面不能跟着pattern模式的字符,匹配效果并不 包罗这个模式的字符串。
5. (?<=pattern):表示匹配位置前面必须跟着pattern模式的字符,匹配效果并 不包罗这个模式的字符串。
6.(?<!pattern):表示匹配位置前面不能跟着pattern模式的字符,匹配效果并不 包罗这个模式的字符串
7.(?:pattern):表示将 pattern 包罗在一个分组中,但不把这个分组的匹配效果 生存到分组编号中。
三、Python中的re库 

3.1、re.match

   该函数尝试从字符串的起始位置匹配,如果起始位置没有匹配乐成的话,就返回 None,否则会返回一个匹配对象
    re.match(pattern,string,flags=0) 
          pattern:正则表达式的格式。
          string:被匹配的文本。
          flags:标志位,用于控制正则表达式的匹配方式
    应用场景
          验证输入格式:检查用户输入是否符合特定的格式,比方电子邮件、电话号码、 日期等 
          提取信息:从字符串的开始位置提取符合正则表达式模式的字串,如提取文件名 等。
          数据分析:在处理日记文件或配置文件时,可以用来分析每行的开始部分,获取 关键信息。 
  1. import re
  2. m = re.match('foo', 'food') # 返回匹配对象
  3. print(m) # <re.Match object; span=(0, 3), match='foo'>
  4. m = re.match('foo', 'fbar') # 不匹配,返回None
  5. print(m) # None
复制代码
3.2、re.search

   从文本中获取第一个符合正则表达式模式的字符的位置,并返回一个匹配对 象,如果没有匹配到,就返回None。
    re.search(pattern,string,flags=0) 
          pattern:正则表达式的格式。
          string:被匹配的文本。
          flags:标志位,用于控制正则表达式的匹配方式
    应用场景
          检查字符串是否包罗子串:检查一个字符串是否包罗某个特定的文本。
          提取数据:从字符串中的恣意位置提取信息,比方从一个文本段落中提取全部提 到的日期。
          搜刮文件:在某文件中查找特定的消息或事故。 
  1. import re
  2. m = re.search('foo', 'hellofood')  
  3. print(m) # <re.Match object; span=(6, 9), match='foo'>
  4. m = re.search('foo', 'hello')  
  5. print(m) # None
复制代码
3.3、re.findall

   数从文本中寻找全部与模式匹配的子串,并将全部的匹配效果存储到一个列表中 举行返回,如果没有匹配乐成会返回一个空列表。
    re.findall(pattern,string,flags=0) 
          pattern:正则表达式的格式。
          string:被匹配的文本。
          flags:标志位,用于控制正则表达式的匹配方式
    应用场景
          提取多个子串:当你必要在字符串中找到全部匹配特定模式的字串时。
          文本分析:在文本中,提取文本中特定的词汇、短语或模式。
  1. import re
  2. lst = re.findall('ab', 'abcdabcdabcd')
  3. print(lst) # ['ab', 'ab', 'ab']
复制代码
3.4、re.sub

   将文本中与模式匹配的部分替换为其他的内容
    re.sub(pattern,repl,string,count,flags=0) 
          pattern:正则表达式的格式。
          repl:这是替换文本或一个函数。如果是文本,就是将匹配到的内容替换为该文本; 如果是函数,会在函数中举行文本处理的操作。
          string:被匹配的文本。
          count: 这是可选参数,表示替换的最大次数。默认值为 0,表示替换全部 匹配项。
          flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写、 设置多行匹配模式等,具体有哪些标志可参考下面的附录1表格。
    应用场景
          文本格式化:将文本中的特定模式的文本替换为另一种格式。
          数据洗濯:在处理数据时,移除或替换无效或不必要的字符,比如在一系列文本 中删除非数字字符以清算电话号码。
          敏感信息脱敏:在显示或存储数据前,将敏感信息(比如身份证号、手机号)的 部分内容替换为星号。 
  1. import re
  2. text = 'yeah, but no, but yeah, but no'
  3. print(re.sub('but', 'AND', text))
  4. # yeah, AND no, AND yeah, AND no
复制代码
3.5、re.split

   将某文本根据匹配模式举行分割,并将分割后的效果放入列表中返 回
    re.split(pattern,string,maxsplit,flags=0) 
          pattern:正则表达式的格式。
          string:被匹配的文本。
          maxsplit:表示最大分割次数。默认值为 0,表示分割所 有匹配项。
          flags:标志位,用于控制正则表达式的匹配方式
  1. import re
  2. text = "apple, banana, orange, watermelon"
  3. fruits = re.split(r',\s*', text)
  4. print(fruits) #['apple', 'banana', 'orange', 'watermelon']
复制代码
3.6、re.compile

   预先编译正则表达式要匹配的模式,并会返回一个正则表达式的对象,该对 象与re.match返回的对象差别,该对象可以调用上面的函数。
    re.compile(pattern, flags=0) 
          pattern:要匹配的正则表达式。
          flags:标志位,用于控制正则表达式的匹配方式
    常见的应用场景:
          多次匹配:当你必要在一个较长的文本中多次应用同一个正则表达式时,使用 re.compile可以避免每次匹配时都重新编译表达式。
  1. import re
  2. # 编译一个正则表达式模式,用于匹配手机号
  3. email_pattern = re.compile(r'[1]{1}[3589]{1}[0-9]{9}')
  4. text = '''
  5. 1o23j0 rde0
  6. 13309876543
  7. cvbnoikdjgv
  8. 10248895490-/*-+68-*8+
  9. '''
  10. emails = email_pattern.search(text)
  11. print(emails)
  12. # <re.Match object; span=(15, 26), match='13309876543'>
复制代码
 四、头脑导图



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表