正则表达式

正则表达式

一、元字符

1、匹配单个字符

元字符功能描述
.匹配除换行符外的任意字符
[] 1字符集合,匹配中括号中包含的的任意一个字符
\d匹配数字,与[0-9类似]
\D匹配非数字字符,与[^0-9]等效
\w匹配数字,字母和下划线,效果同[0-9a-zA-Z_]
\W匹配非字母,数字和下划线,与[^0-9a-zA-Z_] 类等效
\s匹配任何的空字符串,包括空格,换行,制表符,换页,与[ \f\n\r\t\v]等效
\S与\s相反,与[^ \f\n\r\t\v]等效

2、锚字符(边界字符)

元字符功能描述
^匹配以^之后的字符或模式结束的字符串
$匹配以$前面的字符或模式结束的字符串
\A匹配字符串开始,只匹配整个字符串的开头,即使在re.M模式下, 也不会匹配匹配其他行的行首
\Z匹配字符串的结尾,只匹配整个字符串的结尾,即使在re.M模式下,也不会匹配其他行的行尾
\b匹配一个单词的边界,即单词和空格讲的位置
\B匹配非单词的边界

3、匹配多个字符

元字符功能描述
(xyz)匹配小括号内的xyz(作为一个整体匹配)
x?匹配位于?之前的0个或1个字符或子模式,即问号之前的字符或子模式是可选的.2
x*匹配位于*之前的字符或子模式的0次或多次出现
x+匹配位于+之前的字符或子模式的1次或多次出现
x{n}按{}中指定的次数进行匹配.如:{3, 8}表示前面的字符或模式至少重复3次,最多重复8次
x竖线y匹配位于竖线之前或之后的字符

二、re模块简介

1.方法:

  • re.match(pattern, string, flags=0)
    • 参数列表:
      pattern:匹配的正则表达式
      string:要匹配的字符串
      flags:标志位,用于控制正则表达式的匹配方式,值如下
      • re.I—忽略大小写
      • re.L—做本地化识别
      • re.M—多行匹配,影响^和$元字符
      • re.S—使.匹配包括换行符在内的所有字符
      • re.U—根据Unicode字符集解析字符,影响\w \W \b \B
      • re.X—是我们更灵活的格式理解正则表达式
    • 功能: 尝试从字符串的起始位置匹配一个模式,如果不是从起始位置匹配成功的,返回None,成功返回match对象。
    • 代码:
    import re 
    
    >>> re.match("www", "www.baidu.com")
    <_sre.SRE_Match object; span=(0, 3), match='www'>
    >>> re.match("www", "ww.baidu.com")
    None
    >>> re.match("www", "ww.baidu.com")
    None
    
  • **re.search( pattern, string, flags=0) **
    • 参数列表:
      pattern:匹配的正则表达式
      string:要匹配的字符串
      flags:标志位,用于控制正则表达式的匹配方式
    • 功能:扫描整个字符串,并返回第一个匹配成功的字符串(match对象)
    • 代码:
    >>> re.search("bai", "www.baidu.com")
    <_sre.SRE_Match object; span=(4, 7), match='bai'>
    
  • ** re.findall(pattern, string, flags=0) **
    • 参数列表:
      pattern:匹配的正则表达式
      string:要匹配的字符串
      flags:标志位,用于控制正则表达式的匹配方式
    • 功能:扫描字符串,返回所有的参数列表
    • 代码:
    >>> re.serach("ab", "abcbaabab,baab.")
    ['ab', 'ab', 'ab', 'ab']
    
  • re.split(pattern, string, maxsplit=0)
    • 参数列表:
      pattern:切割字符串的模式
      string:被切割的字符串
      maxsplit:最多分割次数
    • 功能:切割字符串
    • 代码:
    >>> import re
    >>> str = "alpha. beta...gamma delta"
    >>> re.split('[\. ]+', str)
    ['alpha', 'beta', 'gamma', 'delta']
    
  • re.finditer(pattern, string, flags=0)
    • 参数列表:
      pattern:匹配的正则表达式
      string:要匹配的字符串
      flags:标志位,用于控制正则表达式的匹配方式
    • 功能:返回包含所有匹配项的跌迭代对象,其中每个匹配项都是match对象
  • re.sub(pat, repl, string, count=0)
    • 参数列表:
      pat:匹配模式
      repl:用于替换的字符串
      string:被匹配的字符串
      count:最多替换次数
    • 功能:将字符串中的所有pat的匹配项用用repl替换,返回包含新字符串,repl可以是字符串或返回字符 串的可调用对象,改可调用对象作用于每个匹配的match对象
    • 代码:
    import re
    >>> text = "Dera {name}..."
    >>> pat = '{name}'
    >>> re.sub(pat, 'Mr.Dong', text)
    'Dear Mr.Dong...'
    >>> s = 'It is a very good good idea'
    >>> re.findall(r'(\b\w+) \1', s)
    ['good']
    #处理连续重复的单词
    >>> re.sub(r'(\b\w+) \l', r'\l', s)
    It is a very good idea	
    
    >>> re.sub('a', lambda x:x.group(0).upper(), 'aaa abc abde') #repl为可调用对象
    'AAA Abc Abde'
    
  • re.subn(pat, repl, string, count=0)
    • 参数列表:
      pat:匹配模式
      repl:用于替换的字符串
      string:被匹配的字符串
      count:最多替换次数
    • 功能:将字符串中的所有pat的匹配项用用repl替换,返回包含新字符串和替换次数的二元数组,repl可以是字符串或返回字符 串的可调用对象,改可调用对象作用于每个匹配的match对象
    • 代码:
    >>> re.subn('a', 'dfg', 'aaa abc avbde')
    ('dfgdfgdfg dfgbc dfgvbde', 5)
    

2、正则表达式集锦

正则表达式功能
‘[pjc]ython’匹配’python’,‘jython’,‘cython’
[0-9a-zA-Z]匹配任意大小写的字母和数字
[^abc]匹配除’a’, ‘b’, ‘c’ 外的字符
'pythonperl’ 或’p(ython
r’(http://)?(www.)?python.org’只能匹配’http://www.python.org’ 或’www.python.org’或’‘http://python.org’或’python.org’
‘^http’只能匹配以"http"开头的字符串
(pattern)*允许模式重复0次或多次
(pattern)+允许模式重复1次或多次
(pattern){m,n}允许模式重复m-n次,注意痘后后面不要有空格
'(ab)*c’
‘ab{1,}’等价于’ab+’ ,匹配以字母a开头后面紧跟一个或多个字母b的字符串
‘^(\w){6,20}$’匹配长度为6-20的字符串,可以包含数字,字母,下划线
‘^\d{1,3}.\d{1,3}\d{1,3}.\d{1,3}’检查给定的字符串是否为合格的IP地址格式
‘^(13[4-9]\d{8})竖线(15[01289]\d{8})’检查给定的字符串是否为移动手机号码

3、match对象

  • 主要方法:
    • group()-----------返回匹配的一个或多个子模式内容
    • groups()----------返回一个包含匹配所有子模式内容的元组
    • groupdict()-------返回包含匹配的所有命名子模式内容的字典
    • start()-------------返回指定子模式内容的起始位置
    • end()--------------返回指定子模式的结束位置的前一个位置
    • span()------------返回一个包含指定子模式内容其实位置和结束位置前一个未知的元组
      括号中的参数传递是组对应的相对位置
  • 代码:
>>> import re
>>> m = re.match(r'(\w+) (\w+)', "Isaac Network,physocist")
>>> m.group(0)  #返回整个模式内容
Isaac Network
>>>m.group(1)
Isaac
>>> m.group(2)
Network
m.grouop(1, 2)
Isaac Network

  1. 对字符集合的补充
    [1234567890]----表示匹配任意的单个数字,与[0-9]等效
    [a-z]----表示匹配任意单个的小写字母
    [A-Z]----表示匹配任意的单个大写字母
    [0-9a-zA-Z]----表示匹配任意的数字和字母
    [0-9a-zA-Z_]----表示匹配任意的数字,字母和下划线
    [^abc]----匹配除了abc以外的所有字符,在[]中的位运算符表示反向范围字符. ↩︎

  2. 2 ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值