Python学习—day4

    xiaoxiao2023-11-26  123

    学习python打卡day4 此次学习的内容链接 链接:https://www.runoob.com/regexp/regexp-tutorial.html https://www.runoob.com/python3/python3-reg-expressions.html

    正则表达式

    正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

    使用正则表达式,可以做以下事情: 1测试字符串内的模式。 可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。 2替换文本。 可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。 3基于模式匹配从字符串中提取子字符串。 可以查找文档内或输入域内特定的文本。

    元字符的那些事

    https://www.runoob.com/regexp/regexp-metachar.html

    普通字符

    没有显式指定为元字符的所有可打印和不可打印字符。包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。

    特殊字符

    字符如其名,有特殊的含义 要注意若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。

    限定符

    指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种

    定位符

    定位符用来确定正则表达式要匹配字符串的位置。 描述字符串或单词的边界,^ 和 $ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界 注意:不能将限定符与定位符一起使用

    https://c.runoob.com/front-end/854 上面这个链接是常用的正则表达式

    正则表达式处理函数

    re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。 re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

    re.match函数

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

    re.match(pattern, string, flags=0)

    pattern:用于匹配的正则表达式 string:要匹配的字符串。 flags: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

    例子

    import re print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配 (0, 3) None

    re.search

    re.search 扫描整个字符串并返回第一个成功的匹配

    re.search(pattern, string, flags=0)

    例子:

    import re print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配 (0, 3) (11, 14)

    re.match与re.search的区别: re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

    re.sub

    re.sub用于替换字符串中的匹配项

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

    pattern : 正则中的模式字符串 repl : 替换的字符串,也可为一个函数 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 参数是一个函数

    compile 函数

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

    re.compile(pattern[, flags])

    参数: pattern : 一个字符串形式的正则表达式 flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为: re.I 忽略大小写 re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境 re.M 多行模式 re.S 即为’ . ‘并且包括换行符在内的任意字符(’ . ‘不包括换行符) re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库 re.X 为了增加可读性,忽略空格和’ # '后面的注释

    【作业】

    1.电话号码正则 电话号码由数字和 - 组成 如果包含区号,那么区号为三位或四位,首位是0 区号用 - 和其他数字分割 除了区号,电话号码为7位到8位 手机号码为11位 11位手机号码的前两位:13 14 15 17 18 19 (1)固话的正则 (2)手机号码的正则 (3)电话号码的正则 答:

    (1)^0\d{2,3}-\d{7,8}$ (2)^1[3|4|5|7|8]d{9}$ (3)(^0\d{2,3}-\d{7,8}$)|(^1[3|4|5|7|8]d{9}$)

    2.身份证号码的正则 长度:15位或18位 如果是15位,则都是数字 如果是18位,最后一位可能是数字或字母 (1)15位数字 (2)18位数字 (3)17位数字+X (4)身份证号码的正则 答:

    (1)^\d{15}$ (2)^\d{18}$ (3)^\d{17}(\d|X|x)$ (4)(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

    3.电子邮箱的正则 邮箱格式:用户名@网址.域名 用户名:字母、数字、下划线组成 网址:字母、数字 域名:2-4位字母组成,1-2个域名 不区分大小写 (1)用户名 (2)网址 (3)电子邮箱正则 答:

    (1)^\w+ (2)[a-zA-Z0-9]+ (3)(^\w+)@[a-zA-Z0-9]+(\.[a-zA-Z]{2,4}{1,2}$)
    最新回复(0)