首页 > 其他 > 详细

正则表达式

时间:2019-08-15 09:24:43      阅读:66      评论:0      收藏:0      [点我收藏+]

正则表达式

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

语法:re.match(pattern, string, flags=0)

参数:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串
  • flags:标志位,控制正则表达式的匹配方式
选项 作用描述
re.I 忽略大小写
re.L 字符集本地化,用于多语言环境
re.M 多行匹配
re.S 使. 匹配包括\n在内的所有字符
re.X 忽略正则表达式中的空白,换行,以便添加注释
import re

def main():
    names = ['name1', '_name', '2_name', '__name__', 'age!']
    for name in names:
        ret = re.match('[a-zA-Z_]+[\w]$', name)
        if ret:
            print('变量名 %s 符合要求,通过正则匹配的数据是%s' % (name, ret.group()))
        else:
            print('变量名 %s 非法' % name)


if __name__ == '__main__':
    main()

# match默认从头开始匹配
# group():用于获得一个或多个分组匹配的字符串,当要获得整个匹配的字符串时,可直接使用group()或group(0)

re.search方法

re.search匹配整个字符串(全文搜索),直到找到一个匹配。

语法:re.search(pattern, string, flags=0)

参数:

  • pattern:匹配的正则表达式
  • string:要匹配的字符串

  • flags:标志位,控制正则表达式的匹配方式

re.match和re.search基本语法是一样的,区别在于re.match只匹配字符串的开始,如果字符串的开始不符合正则表达式,匹配失败,返回None;而re.search匹配整个字符串(全文搜索),直到找到一个匹配。

import re

line = 'Cats are smarter than dogs'

matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
    print('matchObj.group(): ', matchObj.group())
    print('matchObj.group(1): ', matchObj.group(1))
    print('matchObj.group(2): ', matchObj.group(2))
else:
    print('not match!')

    
"""
执行结果:
searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter
"""

re.sub函数

用于替换字符串的匹配项

语法:re.sub(pattern, repl, string, count=0, flags=0)

参数:

  • pattern : 匹配的正则表达式
  • 替换的字符串,也可为一个函数
  • string : 要被查找替换的原始字符串
  • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配
  • flags:标志位,控制正则表达式的匹配方式
import re
 
phone = "2004-959-559 # 这是一个电话号码"
 
# 删除注释
num = re.sub(r'#.*$', "", phone)
print ("电话号码 : ", num)
 
# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print ("电话号码 : ", num)


"""
执行结果:
电话号码 :  2004-959-559 
电话号码 :  2004959559
"""

repl也可以是函数

def num(temp):
    str_num = temp.group()
    num = int(str_num) + 1
    return str(num)


ret = re.sub(r'\d+', num, 'num = 999')
print(ret)

# 结果:num = 1000

re.compile函数

compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

语法:re.compile(pattern[, flags])

参数:

  • pattern:匹配的正则表达式
  • flags:标志位,控制正则表达式的匹配方式
>>> import re
>>> pattern = re.compile(r'\d+')
>>> m = pattern.match('abcdefg1234567qwer')
>>> print(m)
None

re.findall方法

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。

语法:re.findall(string[, pos[, endpos]])

参数:

  • string 待匹配的字符串。
  • pos 可选参数,指定字符串的起始位置,默认为 0。
  • endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
>>> import re
>>> 
>>> pattern = re.compile(r'\d+')
>>> pattern.findall('runoob 123 google 456')
['123', '456']
>>> pattern.findall('asjdjs234ksksk432')
['234', '432']
>>> 

正则表达式应用

匹配号码

import re

pattern = re.compile(r'[\(]?\d{3}[\)-]?\d{8}|[\(]?\d{4}[\)-]\d{7}')
te1 = '010-12345678'
te2 = '0518-1234567'
te3 = '(010)12345678'
te4 = '(0518)1234567'
ret1 = pattern.match(te1).group()
ret2 = pattern.match(te2).group()
ret3 = pattern.match(te3).group()
ret4 = pattern.match(te4).group()
print(ret1)
print(ret2)
print(ret3)
print(ret4)

匹配邮件

import re


def main():
     mail = input('请输入邮箱地址: ')
     ret = re.match(r'[a-zA-Z_0-9]{4,20}@(139|126|163|qq|gmail|foxmail)\.com$', mail)
     if ret:
         print('邮箱: %s 符合要求,匹配出来的数据是%s' % (mail, ret.group()))
     else:
         print('邮箱: %s 非法' % mail)


 if __name__ == '__main__':
     main()

正则表达式

原文:https://www.cnblogs.com/dhzg/p/11355583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!