美文网首页
Python学习笔记08-正则表达式

Python学习笔记08-正则表达式

作者: 如梦似幻之旅 | 来源:发表于2017-11-28 20:25 被阅读0次

    正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

    在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块。

    re模块

    # re.match(正则表达式,要匹配的字符串)
    
    • re.match是用来进行正则匹配检查的方法,若字符串匹配正则表达式,则match方法返回匹配对象(Match Object),否则返回None(注意不是空字符串"")。
    • 匹配对象Macth Object具有group方法,用来返回字符串的匹配部分。
    # re.match() 能够匹配出以xxx开头的字符串
    result = re.match('hello','helloworld')
    # 使用match方法进行匹配操作
    # 如果上一步匹配到数据的话,可以使用group方法来提取数据
    print(result.group())
    

    匹配单字符

    字符 功能
    . 匹配任意1个字符(除了\n)
    [ ] 匹配[ ]中列举的字符
    \d 匹配数字,即0-9
    \D 匹配非数字,即不是数字
    \s 匹配空白,即 空格,tab键
    \S 匹配非空白
    \w 匹配单词字符,即a-z、A-Z、0-9、_
    \W 匹配非单词字符

    原始字符串

    使用原始字符串解决正则表达式需要匹配的文本包含转义字符“\”的问题。原始字符串是在字符串前加上r。

    mm = "c:\\a\\b\\c"
    ret = re.match(r"c:\\a",mm).group()
    print(ret)
    

    匹配多个字符

    字符 功能
    * 匹配前一个字符出现0次或者无限次,即可有可无
    + 匹配前一个字符出现1次或者无限次,即至少有1次
    ? 匹配前一个字符出现1次或者0次,即要么有1次,要么没有
    {m} 匹配前一个字符出现m次
    {m,} 匹配前一个字符至少出现m次
    {m,n} 匹配前一个字符出现从m到n次

    示例

    [A-Z][a-z]* 匹配首字母大写后面都是小写字母并且这些小写字母可有可无 
    [a-zA-Z_]+[\w_]* 匹配变量名是否有效
    [1-9]?[0-9] 匹配0到99之间的数字
    [a-zA-Z0-9_]{8,20} 匹配8到20位的密码,可以是大小写英文字母、数字、下划线
    

    匹配边界

    字符 功能
    ^ 匹配字符串开头
    $ 匹配字符串结尾
    \b 匹配一个单词的边界
    \B 匹配非单词边界

    匹配分组

    字符 功能
    匹配左右任意一个表达式
    (ab) 将括号中字符作为一个分组
    \num 引用分组num匹配到的字符串
    (?P<name>) 分组起别名
    (?P=name) 引用别名为name分组匹配到的字符串

    re模块中常用函数

    函数 说明
    compile() 根据包含正则表达式的字符串创建模式对象
    search() 在字符串中寻找模式
    match() 在字符串的开始处匹配模式
    split() 根据模式的匹配项来分割字符串
    findall() 列出字符串中模式的所有匹配项
    sub(pat,repl,string[,count=0]) 将字符串中的所有pat的匹配项用repl替换
    escape() 将字符串中所有特殊正则表达式字符转义
    import re
    
    pat = r'\d+'
    string = '人民币100万'
    print(re.search(pat, string).group())
    if re.search(pat, string):
        print('found it')
    
    some_text = 'alpha.beta...game'
    print(re.split('[.]+', some_text))
    
    pat1 = '[a-zA-Z]+'
    text = 'Hm...are you sure?'
    print(re.findall(pat1, text))
    
    pat2 = '{name}'
    text1 = 'Dear {name}...'
    print(re.sub(pat2, 'xiaoli',text1))
    
    print(re.escape('www.python.org'))
    print(re.escape('hello world'))
    

    结果

    100
    found it
    ['alpha', 'beta', 'game']
    ['Hm', 'are', 'you', 'sure']
    Dear xiaoli...
    www\.python\.org
    hello\ world
    

    相关文章

      网友评论

          本文标题:Python学习笔记08-正则表达式

          本文链接:https://www.haomeiwen.com/subject/guelbxtx.html