首页 > 编程语言 >无涯教程-Python - 正则表达示

无涯教程-Python - 正则表达示

时间:2023-08-26 10:03:45浏览次数:53  
标签:Remark 匹配 No Python 无涯 re 正则 group

正则表达式是特殊的字符序列,可使用模式中保留的特殊语法来帮助您匹配或查找其他字符串或字符串集。

Python模块 re 提供对Python中类似Perl的正则表达式的全面支持。如果在编译或使用正则表达式时发生错误,则re模块会引发异常re.error。

Match 函数

此函数尝试使用可选的标志将RE 模式与字符串匹配。

这是此函数的语法-

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

这是参数的描述-

Sr.No. Params & Remark
1

pattern

这是要匹配的正则表达式。

2

string

这是字符串,将对其进行搜索以匹配字符串开头的模式。

3

flags

您可以使用按位或(|)指定不同的标志。这些是修饰符,在下表中列出。

re.match 函数在成功时返回 match 对象,在失败时返回 None 。无涯教程使用 match 对象的 group(num)或 groups()函数来获取匹配的表达式。

Sr.No. Match Object Method & Remark
1

group(num=0)

此方法返回整个匹配项

2

groups()

此方法返回一个元组中的所有匹配子组(如果没有,则为空)

#!/usr/bin/python
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 "No match!!"

执行以上代码后,将产生以下输出-

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

Search 函数

此函数使用可选的标志在字符串字符串中搜索RE 模式的首次出现。

这是此函数的语法-

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

这是参数的描述-

Sr.No. Parameter & Remark
1

pattern

这是要匹配的正则表达式。

2

string

这是字符串,将对其进行搜索以匹配字符串中任何位置的模式。

3

flags

您可以使用按位或(|)指定不同的标志。这些是修饰符,在下表中列出。

re.search 函数在成功时返回 match 对象,在失败时返回 none 。无涯教程使用 match 对象的 group(num)或 groups()函数来获取匹配的表达式。

Sr.No. Match Object Methods & Remark
1

group(num=0)

此方法返回整个匹配项

2

groups()

此方法返回一个元组中的所有匹配子组(如果没有,则为空)

#!/usr/bin/python
import re

line="Cats are smarter than dogs";

searchObj=re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print "searchObj.group() : ", searchObj.group()
   print "searchObj.group(1) : ", searchObj.group(1)
   print "searchObj.group(2) : ", searchObj.group(2)
else:
   print "Nothing found!!"

执行以上代码后,将产生以下输出-

searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter

Match与Search

Python根据正则表达式提供了两种不同的基本操作: match 仅在字符串的开头检查匹配项,而 search 在字符串的任何位置检查匹配项。

#!/usr/bin/python
import re

line="Cats are smarter than dogs";

matchObj=re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print "match --> matchObj.group() : ", matchObj.group()
else:
   print "No match!!"

searchObj=re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print "search --> searchObj.group() : ", searchObj.group()
else:
   print "Nothing found!!"

执行以上代码后,将产生以下输出-

No match!!
search --> searchObj.group() :  dogs

Sub 替换函数

使用正则表达式的最重要的 re 方法之一是 sub 。

re.sub(pattern, repl, string, max=0)

此方法用 repl 替换 string 中RE pattern 的所有出现,除非提供 max ,否则将所有出现替换。

#!/usr/bin/python
import re

phone="2004-959-559 # This is Phone Number"

# Delete Python-style comments
num=re.sub(r'#.*$', "", phone)
print "Phone Num : ", num

# Remove anything other than digits
num=re.sub(r'\D', "", phone)    
print "Phone Num : ", num

执行以上代码后,将产生以下输出-

Phone Num :  2004-959-559
Phone Num :  2004959559

正则表达式修饰符

正则表达式文字可以包括可选的修饰符,以控制匹配的各个方面。修饰符被指定为可选标志。您可以使用异或(|)来提供多个修饰符

Sr.No. Modifier & Remark
1

re.I

不区分大小写。

2

re.L

根据当前语言环境解释单词。

3

re.M

使$匹配行的结尾,并使^匹配任何行的开头。

4

re.S

使句点(.)匹配任何字符,包括换行符。

5

re.U

根据Unicode字符集解释字母。

6

re.X

忽略空格,并将未转义的#视为注释标签。

正则表达式模式

除控制字符(+?。* ^ $()[] {} |\)外,所有字符都匹配。您可以在控制字符前加反斜杠来对其进行转义。

下表列出了Python中可用的正则表达式语法-

Sr.No. Pattern & Remark
1

^

匹配行首。

2

$

匹配行尾。

3

.

匹配除换行符以外的任何单个字符。

4

[...]

匹配括号中的任何单个字符。

5

[^ ...]

匹配任何不在方括号中的单个字符

6

re *

匹配0个或多个出现的前一个表达式。

7

re +

匹配1个或多个出现的前一个表达式。

8

re?

匹配0或1个出现的前一个表达式。

9

re {n}

精确匹配前一个表达式的n次出现。

10

re {n,}

匹配n个或多个出现的前一个表达式。

11

re {n,m}

至少匹配n个,最多匹配m个先前的表达式。

12

a | b

匹配a或b。

13

(re)

对正则表达式进行分组并记住匹配的文本。

14

(?imx)

临时启用正则表达式中的i,m或x选项。

15

(?-imx)

暂时关闭正则表达式中的i,m或x选项。

16

(?: re)

对正则表达式进行分组,而无需记住匹配的文本。

17

(?imx:re)

暂时在括号内打开i,m或x选项。

18

(?-imx:re)

暂时关闭括号内的i,m或x选项。

19

(?#...)

注释.

20

(?= re)

使用模式指定位置。

21

(?! re)

使用模式否定指定位置。

22

(?> re)

匹配独立模式而无需回溯。

23

\w

匹配单词字符。

24

\W

匹配非单词字符。

25

\s

匹配空格。等效于[\t\n\r\f]。

26

\S

匹配非空格。

27

\d

匹配数字。相当于[0-9]。

28

\D

匹配非数字。

29

\A

匹配字符串的开头。

30

\Z

匹配字符串的结尾。如果存在换行符,则匹配换行符。

31

\z

匹配字符串的结尾。

32

\G

匹配结束点。

33

\b

在方括号外时匹配单词边界。放在方括号内时,匹配退格键(0x08)。

34

\B

匹配非单词边界。

35

\n,\t etc

匹配换行符,回车符,制表符等。

36

\1 ...\9

匹配第n个分组的子表达式。

37

\10

如果已经匹配,则匹配第n个分组的子表达式。否则是指字符代码的八进制表示形式。

正则表达式示例

Sr.No. Example & Remark
1

python

匹配" python"。


Sr.No. Example & Remark
1

[Pp] ython

匹配" Python"或" python"

2

rub [ye]

匹配" ruby​​"或" rube"

3

[aeiou]

匹配任何一个小写的元音

4

[0-9]

匹配任意数字;与[0123456789]相同

5

[a-z]

匹配任何小写ASCII字母

6

[A-Z]

匹配任何大写ASCII字母

7

[a-zA-Z0-9]

符合以上任何条件

8

[^ aeiou]

匹配小写元音以外的其他任何东西

9

[^ 0-9]

匹配数字以外的任何东西


Sr.No. Example & Remark
1

.

匹配换行符以外的任何字符

2

\d

匹配数字:[0-9]

3

\D

匹配一个非数字:[^ 0-9]

4

\s

匹配空白字符:[\t\r\n\f]

5

\S

匹配非空格:[^\t\r\n\f]

6

\w

匹配一个单词字符:[A-Za-z0-9_]

7

\W

匹配一个非单词字符:[^ A-Za-z0-9_]


Sr.No. Example & Remark
1

ruby?

匹配" rub"或" ruby​​":y是可选的

2

ruby*

匹配" rub"加上0或更多ys

3

ruby​​ +

匹配" rub"加上1个或多个ys

4

\d {3}

精确匹配3位数字

5

\d {3,}

匹配3个或更多数字

6

\d {3,5}

匹配3、4或5位数字

这匹配最小的重复次数-

Sr.No. Example & Remark
1

<.*>

贪婪重复:匹配“ <python> perl>”

2

<.*?>

非贪婪:匹配“ <python> perl>”中的“ <python>”


Sr.No. Example & Remark
1

\D\d +

无组:+重复\d

2

(\D\d)+

分组:+重复\D\d

3

([Pp] ython(,)?)+

匹配" Python"," Python,python,python"等。

这再次匹配先前匹配的组-

Sr.No. Example & Remark
1

([Pp])ython&\1ails

匹配python&pails或Python&Pails

2

(['"])[^\1] *\1

单引号或双引号字符串。\1匹配第一组匹配的任何内容。\2匹配第二组匹配的任何东西,依此类推。


Sr.No. Example & Remark
1

python | perl

匹配" python"或" perl"

2

rub(y | le))

匹配"ruby"或"ubler"

3

Python(!+ |\?)

" Python"后跟一个或多个!还是一个?

这需要指定匹配位置。

Sr.No. Example & Remark
1

^ Python

开头匹配" Python"

2

Python $

行末匹配" Python"

3

\APython

在字符串开头匹配" Python"

4

Python\Z

末尾匹配" Python"

5

\bPython\b

在单词边界处匹配" Python"

6

\brub\B

\B为非单词边界:匹配" rube"和" ruby​​"中的" rub",但不单独匹配

7

Python(?=!)

如果后面带有感叹号,则匹配" Python"。

8

Python(?!!)

匹配" Python",如果没有后跟一个感叹号。


Sr.No. Example & Remark
1

R(?#comment)

匹配" R"。所有其余的都是评论

2

R(?i)uby

匹配" uby"时不区分大小写

3

R(?i:uby)

同上

4

rub(?:y | le))

仅在不创建\1反向引用的情况下进行分组

参考链接

https://www.learnfk.com/python/python-reg-expressions.html

标签:Remark,匹配,No,Python,无涯,re,正则,group
From: https://blog.51cto.com/u_14033984/7240408

相关文章

  • 分享一个批量转换某个目录下的所有ppt->pdf的Python代码
    大家好,我是皮皮。一、前言前几天在Python最强王者群【Python小小小白】分享了一份Python自动化办公的代码,可以批量转换某个目录下的所有ppt->pdf,非常强大。二、实现过程在正式跑代码之后,你可能需要按照对应的库,不然会报错。代码运行之后,本地会出现下面的UI界面,选择PPT文件......
  • 学会Python Requests库+Cookies模拟自动登录!
    importrequestsurl="https://my.cheshi.com/user/"headers={"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/537.36(KHTML,likeGecko)Chrome/116.0.0.0Safari/537.36"}res=requests.get(......
  • python网络编程
    1.套接字套接字(Socket)是实现网络编程进行数据传输的一种技术手段,网络上各种各样的网络服务大多都是基于Socket来完成通信的。socket是传输层提供给应用层的编程接口。所以,套接字socket编程分为TCP与UDP两类。在python中,通过Python套接字编程模块:importsocket提供socket......
  • Python 运算符优先级
    Python运算符优先级所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如对于表达式a+b*c,Python会先计算乘法再计算加法;b*c的结果为8,a+8的结果为24,所以d最终的值也是24。先计算*再计算+,说明*的优先级高于+。Python支持几十种运算符,被划分......
  • 【Python-每日技巧】列举一些Python稍微有点难度的技巧
    元编程(Metaprogramming):这是一项高级技术,允许你在运行时动态地创建、修改和操作代码。Python提供了强大的元编程特性,如使用装饰器(Decorators)、元类(Metaclasses)和反射(Reflection)等。这些概念需要深入理解Python的对象模型和元数据处理能力。以下是一个使用元编程的示例,展示如何动态......
  • 无涯教程-Python - 类/对象
    如果您以前没有使用面向对象(OO)编程的经验,则可能需要查阅有关它的入门课程或至少某种形式的教程,以便掌握基本概念。创建类class语句创建一个新的类定义。该类的名称紧随关键字class后跟冒号,如下所示-classClassName:'Optionalclassdocumentationstring'class......
  • python实现rpc
    RPC(RemoteProcedureCall)是指远程过程调用,也就是说两台服务器A,B一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据为什么要用RPC就是无法在一个进程内,甚至一个计算机内通......
  • 翻译python keyboard模块的说明文档
    之前有介绍过全局热键keyboard库,简略介绍了它的使用.为全面了解,我把其说明文档翻译了一下,如下(中英文对照):Thisprojectiscurrentlyunmaintained.Itworksformanycases,andIwishtopickitupagaininthefuture,butyoumightencountersomefrictionan......
  • python练习题01 碱基统计
     001、测试序列,碱基序列保存只a.fa文件中,统计下面这段序列中A、C、G、T碱基的个数[root@PC1test01]#lsa.fa[root@PC1test01]#cata.fa##测试fasta文件AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC 002、利用基本循环统计[ro......
  • Python数据类型
    Python数据类型字符串(str)字符串是Python中最常用的数据类型。我们可以使用引号('或"或''')来创建字符串。创建字符串很简单,只要为变量分配一个值即可。var1='HelloWorld!'var2="PythonRunoob"字符串的截取的语法格式:变量[头下标:尾下标]str='Runoo......