美文网首页
正则表达式

正则表达式

作者: 222AblackA | 来源:发表于2018-12-08 11:13 被阅读0次

一.正则表达式

1.定义:正则表达式就是字符匹配的工具:由正则符号和普通字符组成来匹配不同规律的字符串

2.python中的正则表达式:

python中提供了了一个re模块,用来支持正则表达式
fullmatch(正则表达式,字符串)  -- 用正则表达式去完全匹配字符串,
                                如果匹配成功返回匹配结果,失败则返回None
 fullmatch(正则表达式,字符串)  -- 用正则表达式去完全匹配字符串,如果
                                完全匹配,则返回匹配到的对象,否则返回None

python中正则表达式的写法:将正则表达式符号写在字符串中,一般在字符串中加r

3.正则表达式中的字符:

a. 普通字符:普通字符在正则表达式中就代表字符本身

b.符号:. -- 点:点出现的位置,可以匹配任意一个字符(一个点匹配一个字符)

    re_str = r'a.c'
    result = re.fullmatch(re_str,'abc')
    print(result)

c.\w -- \w出现的位置,可以匹配字母数字下划线任意一种字符(一个\w匹配一个字符)包括了Unicode中除了ASCII码的所有编码值

    re_str= r'\w\w\w'
    result = re.fullmatch(re_str,'2d3')
    print(result)

d.\s --匹配空白字符(空格、制表符和换行符)

    re_str= r'\s\d\sr'
    result = re.fullmatch(re_str,' 3 r')
    print(result)

e. \d -- 匹配数字字符

     re_str= r'\d\d\d'
     result = re.fullmatch(re_str,'435')
     print(result)

f. \b -- 检测单词的边界

注意:\b 是检测出现的位置是否是单词的边界,不会对字符进行匹配
单词边界:单词开头,单词结尾,标点符号,空白符号等(只要能将两个单词区分开)

        re_str = r'hello\bworld'
        re_str1 = r'hello,\bworld'
        result = re.fullmatch(re_str,'hello world')
        result1 = re.fullmatch(re_str,'hello,world')
        print(result)
        print(result1)

g. ^ -- 检测字符串开头 (在match和fullmatch中没有意义,在search和findall等中有意义)

    re_str = r'^the...'
    result= re.fullmatch(re_str,'thesdo')
    print(result)

h. $ -- 检测字符串结尾(match和fullmatch中没有意义,在search和findall等中有意义)

    re_str = r'the..$'
    result = re.fullmatch(re_str,'the34')
    print(result)

i.

    \W:与非数字、字母、下话线匹配
    \D:与非数字字符匹配
    \S:与非空字符匹配
    \B:检测出现位置是非单词边界

    re_str= r'\d\D\s\w\Ba'
    result = re.fullmatch(re_str,'9h\t_a')
    print(result

j.[任意字符集] -- 匹配中括号出现的额任意一个字符

[]中的正则字符不在表示特殊意思,就是字符本身(带反斜杠的字符符号除外)
[abc] --  匹配a,b,c,中的任意一个字符(一个中括号只能匹配一个字符)
    re_str= r'\bs[sg.+d4=]'
    result= re.fullmatch(re_str,'s=')
    print(result)

k.[字符1-字符2] -- 字符1到字符2之间的所有支付(要求字符1的编码值要小于字符2)

        [a-z]  -- 匹配所有小写字母
        [A-Z]  -- 匹配所有大写字母
        [a-zA-Z]  --  匹配所有字母
        [1-7]  --  匹配数字1到7
        [\u4e00-\u9fa5]  --  匹配所有中文字符
        [ab-] --  这的-表示减号本身

l: [^字符集] -- 匹配不在字符集中的任意一个字符

    [^a-z]  --  匹配除了小写字母以外的任意字符
    [abc^]  --  匹配a,b,c或者^中的任意一个字符

二.正则表达式匹配次数符号

a.匹配0次或者多次: *

    1. *  --  匹配0次或者多次
    2. a* --  a出现0次或者多次都可以匹配(连续出现)
    3. \d* --  任意数字出现0次或者多次
    4. [abcd]* -- a,b,c,d中任意一个字符出现0次或者多次
    5. [A-Z]*  -- A到Z的任意一个大写字母出现0次或者多次
    print(re.fullmatch(r'a*b','aaaaaab'))
    print(re.fullmatch(r'\d*','23555'))

b.匹配1次或者多次(至少一次): +

    a+  -- a至少出现一次或者多次(a是连续出现的)
    print(re.fullmatch(r'a+b','aaaaaaba'))

c.匹配0次或者1次: ?

    a?  --  a 出现一次或者0次(''和'a'可以匹配)
    a = r'[+-]?[1-9]\d*'
    print(re.fullmatch(a,'-166'))

d.匹配n次: {}

    {N}  --  匹配N次(a{3}:a匹配3次)
    {M,N}  --  匹配M到N次(a{3,5}:匹配3、4或者5个a)
    {,N}  --  匹配0到N次,即最多匹配N次
    {N,}  --  匹配至少N次 
    print(re.fullmatch(r'a{3,}d','aaaad'))
    a = r'[a-zA-Z][\da-zA-Z]{5,11}'
    print(re.fullmatch(a,'w23455u5u'))

三.分子、捕获、贪婪

1.分子:条件1|条件2 -- 匹配条件1的正则表达式或者匹配条件2的正则表达式

    \d{2}|[a-z]    --  匹配两个数字字符或者一个小写字母
    \w\d{2} | \w{2} -- 匹配一个(数字、字母、下火线) 加 2个数字或者匹配2个字母数字下划线
    注意:当条件1匹配时,就不会使用条件2匹配

    练习:  写一个正则表达式,匹配所有的数字,包括正负整数小数,0
    a = r'[+-]?[1-9]\d*[.]?[1-9]\d*|[+-]?0[.]\d+|0 '
    print(re.fullmatch(a,'0.0'))

2.捕获和分组

a.分组 -- 即用小括号括起来,将括号中的内容作为一个整体

    re_str1= r'abc(\d{3}|[a-z]{5})'

b.捕获

    re.findall(正则表达式,字符串) --  在字符串中获取正则表达式条件的所有子串,返回一个列表
        注意:   在findall正则表达式中加括号,匹配按正则表达式匹配,返回只括号里面的字符串
    
    str2 = 'asdg3556agrt2a55hhhha5%6*6h'
    print(re.findall(r'a(\d+)',str2))   #  ['55', '5']

3.贪婪

    匹配次数后加?就是贪婪匹配: *?,+?,??,{m,n}?,{m,}?
    在匹配的时候没有什么影响,在搜索的时候有贪婪,会尽量少的搜索

4.转义符号

    在正则表达式中可以在有特殊意义或者特殊功能的付好钱加\来取消其特殊功能

    re_str= r'\\w-\d{3}'
    re_str2= r'a\+'
    print(re.fullmatch(re_str,'\w-232'))
    
    re_str = r'the...'
    result = re.fullmatch(re_str,'the34t')
    print(result)

四.re模块

1.compile(正则表达式) -- 将正则表达式转换成正则表达式对象,转换成对象后可以调用对象方法

    re_str = r'\d*'
    re_object = re.compile(re_str)
    print(re.fullmatch(re_str,'2355'))
    print(re_object.fullmatch('2355'))

2.fullmatch(正则表达式,字符串) -- 完全匹配,从字符串开头匹配到结尾

match(正则表达式 ,字符串) -- 不完全匹配,只匹配字符串开头

    re_str= r'\d[a-z]{2}'
    result1= re.fullmatch(re_str,'3ff')
    print(result1)
    result2 = re.match(re_str,'3ff99338')
    print(result2)

3.search(正则表达式,字符串) -- 从字符串开头搜索到第一个与正则表达式先匹配的字符并返回,没有搜索到返回None

    re_str1 = r'\d\w[ad]{3}'
    print(re.search(re_str1,'werr2_ada87hnn44aad'))

4.split(正则表达式,字符串) -- 在字符串中用符合正则表达式的子串分割字符串,返回一个元素是字符串的列表

    print(re.split(r'\d+|[+*-]+','235gdsgmkr+_jogj50-9*0ung--4hrg--i'))

5.sub(正则表达式,新子串,字符串) -- 用新子串替换字符串中符合正则表达式的子串,返回一个替换后的字符串

    str1= '你妈卖嘛匹,草你妈,你个鬼儿子,fuck you'
    result3 = re.sub(r'[草艹]|f\s*u\s*c\s*k|傻\s*叉','*',str1)
    print(result3)

6.findall(正则表达式,字符串) -- 在字符串中找出所有符合正则表达式的子串,返回一个元素是字符串的列表

    注意 :如果这个正则表达式中有一个分组,结果是列表中的每个元素
           如果有两个以上的分组,结果是列表中的元祖,每个元祖中的元素是每个分组匹配到的结果

7.7.finditer(正则表达式,字符串) -- 获取字符串中满足正则表达式的内容, 返回的是一个迭代器,迭代器中的元素是匹配对象

'''

练习:自己编程实现finditer函数

    def my_finditer(pp,str1):
        re1= re.search(pp,str1)
        while re1:
            yield re1
            str1 = str1[re1.end():]
            re1 = re.search(pp,str1)

相关文章

  • 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/fgxqhqtx.html