2021-04-02

本文详细介绍了Python中正则表达式的使用,包括基础操作、进阶技巧如分组、可选匹配、贪婪与非贪婪匹配等,并通过实例演示了如何进行字符串搜索、替换和提取关键信息。同时,讲解了特殊字符如^和$的含义,以及如何处理换行符。最后,提到了常用的元字符和字符类别在匹配过程中的作用。
摘要由CSDN通过智能技术生成

正则表达式

需要引入一个名为re的包。Import re

1.首先建立一个模板对象,调用x=re.compile(模板)  compile(编辑,编撰)

2.调用模板对象的search()函数,传入需要匹配的字符串。并返回一个对象。  

mo=x.search("bdbfbdsbfdbdf456-789-12345")

  1. 调用对象的group()方法可以返回实际匹配的文本。  mo.group()

      import re

x=re.compile(r'\d\d\d\-\d\d\d-\d\d\d\d\d')

mo=x.search("bdbfbdsbfdbdf456-789-12345")

print(mo.group())

返回456-789-12345

 

 

进阶

一  匹配更多模式

  1. 匹配分组   在正则表达式中建立分组

    x=re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d\d)')

  如果\d多的话也可以用\d{n}  表示n个\d

这时间.group() 函数返回一个列表,分别是各个部分。

   0 代表整体。1代表第一块

例子

import re

x=re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d\d)')

mo=x.search("bdbfbdsbfdbdf456-789-12345")

print(mo.group())

print(mo.group(0))

print(mo.group(1))

print(mo.group(2))

 

 

结果

456-789-12345

456-789-12345

456

789

由于括号有特殊含义  所以如果需要匹配的有() 需要用\ 转义

import re

x=re.compile(r'(\(\d\d\d\))-(\d\d\d)-(\d\d\d\d\d)')

mo=x.search("bdbfbdsbfdbdf(456)-789-12345")

print(mo.group())

print(mo.group(0))

print(mo.group(1))

print(mo.group(2))

 

(456)-789-12345

(456)-789-12345

(456)

789

每一半( 都需要加\

(2)用管道匹配实现匹配到多个表达式其中的一个。用| 实现 注意:当找到第一个符合情况的就会返回

import re

x=re.compile(r'(\(\d\d\d\))|(\d\d\d)|(\d\d\d\d\d)')

mo=x.search("bdbfbdsbfdbdf(456)-789-12345")

print(mo.group())

print(mo.group(0))

print(mo.group(1))

print(mo.group(2))

 

(456)

(456)

(456)

None

 

  1. 可选匹配  用()? 实现。()可以出现1次 或0次

    import re

x=re.compile(r'(\(\d\d\d\))?-(\d\d\d)-(\d\d\d\d\d)')

mo=x.search("bdbfbdsbfdbdf-789-12345")

print(mo.group())

print(mo.group(0))

print(mo.group(1))

print(mo.group(2))

 

 

-789-12345

-789-12345

None

789

import re

x=re.compile(r'(\(\d\d\d\))?-(\d\d\d)-(\d\d\d\d\d)')

mo=x.search("bdbfbdsbfdbdf(456)-789-12345")

print(mo.group())

print(mo.group(0))

print(mo.group(1))

print(mo.group(2))

(456)-789-12345

(456)-789-12345

(456)

789

  1. 用*匹配0次或多次。  ()*   在()中的元素可以出现0 次或多次
  2. 用+匹配1次或多次   
  3. 用{}表示匹配的次数,传递多个参数表示或的意思{3,5}表示3或5次

五  贪心匹配

Python   匹配默认贪心匹配  在表示二意的情况下,尽可能匹配比较长的字符串

      .search()匹配比较长的字符串

     .search{} 匹配比较短的字符串

六 findall()方法

  正常情况下,python将返回第一个满足条件的匹配,

使用findall将返回一个字符串列表 返回所有满足条件的匹配

 

 

 

字符分类 在建立模板时

\d    0到9 的数字

\D    0 到9 以外的任何字符

\w    任何字母,数字和下划线字符

\W    除字母,数字和下划线意外的任何字符

\s     空格,制表符或换行符

\S     除空格,制表符或换行符以外的任何字符  

 

七:

^ 加在表达式开头:表示表示匹配必须发生在被查找文本的开始处。即必须以被查找文本开头

$ 加在表达式末尾:表示匹配的额表达式必须以被匹配的文字结尾

八:通配字符”.”

  用在表达式之前表示一个字符

   (.*)表示任意文本  且使用贪心匹配模式,他总是匹配尽可能多的文本

     用{} 使用非贪心匹配。注意(.*)只匹配换行符之前的。

    如果在re.compile()传入第二个参数  re.DOTALL  则会忽略换行符匹配所以的文本

?

匹配1次或0次前面的分组

*

匹配0次或多次前面的分组

+

匹配一次或多次前面的分组

{n}

匹配n次前面的分组

{n,}

匹配n次或者更多前面的分组

{,m}

匹配0次到m次前面的分组

{n,m}

匹配至少n次,至多m次前面的分组

^spam

意味着字符串必须以spam开始

Spam$

意味着字符串必须以spam结束

.

匹配所有字符,换行符号除外

\d,\w,\s

分别匹配数字,单词,空格

\D,\W,\S

分别匹配除数字,单词,空格以外的所有字符

[abc]

匹配方括号内的任何字符                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

[^abc]

匹配不再方括号内的任何字符

在re.compile 中传入re.DOTALL

忽略换行符,匹配所有对象

在re.compile() 中传入re.I

忽略大小写匹配

在re.compile() 中传入 re.VERBOSE

 忽略空白,注释

 

 

re包除了.search()之外还有.sub().将找到的字符串替换为()中的字符串。返回替换后的字符串

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值