美文网首页
正则表达式

正则表达式

作者: 有趣的恶魔QAQ | 来源:发表于2019-01-15 20:49 被阅读0次

一、正则表达式

1.什么是正则表达式(语法通用)

正则就是一种用来做字符串匹配的工具,可以通过不同的符号匹配不同的字符

2.python对正则表达式的支持

通过re模块提供相应支持正则表达式的方法

  • a.fullmatch(正则表达式,字符串)--> 用正则表达式来和指定字符串进行匹配。
    如果匹配成功返回匹配对象,匹配失败返回None

python中的正则表达式是写在字符串中的,但是一般情况下会在最前面加r/R

from re import fullmatch, search
1 普通字符(代表字符本身)
匹配一个字符串,只有三个字符,每个字符分别是a,b,c
    re_str = r'abc'
    result = fullmatch(re_str, 'abc')
    print(result)
2 . (除\n之外,匹配任意字符)
匹配一个字符串,只有三个字符,第一个字符是a,第二个字符是任意字符,最后一个字符是c
    re_str = r'a...c'  # 可以加多个点每一个点是一个字符
    result = fullmatch(re_str, 'a-*&c')
    print(result)
3 \w (匹配字母数字下划线中文,一个\w只能匹配一个字符)
匹配一个字符串,第一个字符是任意字符,第二个和第三个字符是字母、数字或者_
    re_str = r'.a\w\w'
    result = fullmatch(re_str, 'aa_3')
    print(result)
4 \s (匹配空白字符,指的是所有能产生空白的字符,包括空格、制表符、换行等)
第一个字符是任意字符,第二个是字母数字下划线中文,第三个是空白,第四个是任意字符,第五个是空白

####### 注意:\r和\n都可以表示空白

    re_str = r'.\w\s.\s'
    result = fullmatch(re_str, 'a2 &\n')
    print(result)
5 \d (匹配数字字符)
re_str = r'.\w\d'
result = fullmatch(re_str, '2_3')
print(result)
6 \b (检测单词边界,即检测正则表达式中\b所在的位置是否是单词边界)
单词边界:所有可以将两个单词区分开的符号都是单词边界,如: 空格、缩进、标点符号
匹配一个字符串的内容是'how are',并且要求字符'a'的前面是单词边界
注意:\b不是匹配符号,不会匹配出一个字符,只是检测所在的位置是否满足要求
re_str = r'how \bare'
result = fullmatch(re_str, 'how are')
print(result)
7 ^ (检测字符串开头)
匹配一个字符串,并且第一个字符所在的位置是字符串开头
    re_str = r'^.\w\s\d'
    result = search(re_str, 'a2 2*&342gwg')
    print(result)
8 $ (检测字符串结尾)
匹配一个字符串是三个数字字符,并且最后一个字符的后面是字符串结尾
re_str = r'\d\d\d$'
result = search(re_str, 'fhowqh2141')
print(result)
9 [字符集] (匹配字符集中的任意一个字符)
注意:一个[]代表一个字符
  • a.普通用法: [字符集] -- 匹配字符集中的任意一个字符

  • b.表示范围: [字符1-字符2] -- 匹配字符1到字符2中所有的字符,要求字符1的编码值要小于字符2的编码值

    [1-9] - 数字1到9
    [a-z] - 小写字母
    [A-Z] - 大写字母
    [a-zA-Z] - 所有字母
    [a-zA-Z\d_] - 数字字母下划线

    匹配一个字符串有四个字符,第一个字符是'a'或者'b'或者'c',后边是123
    re_str = r'[abc]123'
    result = fullmatch(re_str, 'a123')
    print(result)
###### 匹配一个字符串有4个字符,第一个字符是数字1-9中的任意一个;最后一个字符是任意小写字母;中间两个字符是任意数字
    re_str = r'[1-5]\d\d[a-z]'
    result = fullmatch(re_str, '211b')
    print(result)

10 [^字符集] - 匹配没有在字符集中的其他任意字符

注意:^放在[]的最前面才表示匹配不在字符集中的其他任意字符;如果它不放在[]的最前面,就表示本身是个字符

匹配一个字符串,第一个字符只要不是abc中的一个,其他的字符都可以,后面123
re_str = r'[^abc]123'
result = fullmatch(re_str, '啊123')
print(result)

# 第一个字符是'a','b','c',或者^ 中的任意一个
re_str = r'[abc^]123'
result = fullmatch(re_str, '^123')
print(result)
11 转义符号
  • a.正则中也可以通过在特殊符号前加''来对符号进行转义,此处切勿将字符串中的转义字符和正则表达式相混淆
  • b.除了在中括号中有特殊意义的符号,其他符号放在[]中也是表示符号本身
    ① '-' : 在中括号中的两个字符之间表示谁到谁;如果想要表示它本身就不要放在两个字符之间
    ② '^' : 在中括号中的最前面有意义,如果想要表示它本身就不要放在最前面
    ③ '[]' : 在中括号中要表示[],要加\
   re_str = r'\d\d\.\d\d'
   print(fullmatch(re_str, '12.34'))
   print(fullmatch(r'[.]', '.'))

if __name__ == '__main__':
   main()

二、匹配次数

import re
def main():
1 *(匹配0次或者多次)

①字符* - 指定的字符出现0次或者多次(这儿的字符可以是正则符号,也可以是普通字符)

  • a* - a出现0次或者多次
  • \d* - 任意数字出现0次或者多次
  • [a-z]* - 任意小写字母出现0次或者多次
    re_str = r'[a-z]*123'
    print(re.fullmatch(re_str, 'cz123'))
123前面有0个或者多个字符,并且每个字符都是数字字符
re_str = r'\d*123'
print(re.fullmatch(re_str, '123414123'))
2 + (匹配1次或者多次)
re_str = r'a+123'
print(re.fullmatch(re_str, 'aa123'))
3 ? (匹配0次或者1次)
re_str = r'\+?123'
print(re.fullmatch(re_str, '+123'))
练习:写一个正则表达式能够匹配所有的整数字符串
re_str = r'[+-]?[1-9]\d*'
print(re.fullmatch(re_str, '52532'))
4 {}
{M,N} - 匹配M到N次(最少M次,最多N次)
{M,}  - 匹配至少M次
{,N}  - 匹配最多N次
{N}   - 匹配N次
密码:6-10位,只能包含数字和字母
    print(re.fullmatch(r'[a-zA-Z\d]{6,10}', '32rfeswgs3'))

三、分支和分组

1 |(分支)
- 表达式1|表达式2|表达式3  - 先用表达式1进行匹配,匹配成功就成功,不成功使用表达式2去匹配,以此类推。(三个表达式中只要有一个匹配成功就成功,否则匹配失败)


re_str = r'[a-z]{3}|\d{3}'
print(re.fullmatch(re_str, 'das'))
2 () (分组)
  • a.分组 - 将括号中的内容看成一个整体
    abc{2} --> abcc
    (abc){2} --> abcabc

  • b.分组重复 - 在有分组的正则表达式中,可以在分组后面通过\(数字)来重复前面第几个分组匹配到的内容
    注意:数字代表需要重复的第几个分组

    (\d{2})abc\1  --> 12abc12
    """
    re_str = r'(abc){2}'
    print(re.fullmatch(re_str, 'abcabc'))

    # 重复分组
    re_str = r'(\d{2}\.)abc\1'
    print(re.fullmatch(re_str, '12.abc12.'))

相关文章

  • Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义...

  • 正则相关

    正则表达式基本语法 正则表达式常见字符 正则表达式特殊字符 正则表达式数量词 正则表达式边界匹配 正则表达式逻辑或...

  • 正则表达式系列-1

    正则表达式系列-1正则表达式系列-2正则表达式系列-3正则表达式系列-4 什么是正则表达式 正则表达式就是用事先定...

  • 正则表达式

    正则表达式 - 教程正则表达式 - 简介正则表达式 - 语法正则表达式 - 元字符正则表达式 - 运算符优先级正则...

  • Python基础入门 - 正则表达式与综合实战

    1. 初识正则表达式 1.1 介绍 步骤介绍正则表达式入门及应用正则表达式的进阶正则表达式案例 1.2 正则表达式...

  • Java正则表达式参考

    Java正则表达式入门 java正则表达式应用 深入浅出之正则表达式(一) 深入浅出之正则表达式(二) 正则表达式...

  • 正则表达式

    正则表达式 正则表达式就是记录文本规则的代码 正则表达式常用的元字符 正则表达式常用的限定符 正则表达式举例:这里...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • 正则表达式

    了解正则表达式基本语法 能够使用JavaScript的正则对象 正则表达式简介 什么是正则表达式 正则表达式:用于...

网友评论

      本文标题:正则表达式

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