亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

Python - 正则表达式

上一页下一页

一个正则表达式 是一个特殊的字符序列,可以帮助您匹配或查找其他字符串或字符串集,使用模式中的特殊语法。正则表达式在 UNIX 世界中被广泛使用。

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

我们将介绍两个重要的函数,它们将用于处理正则表达式。但首先要说一件小事:有各种各样的字符,当它们用于正则表达式时会有特殊的含义。为避免在处理正则表达式时出现任何混淆,我们将使用原始字符串作为 r'expression' .

匹配 功能

此函数尝试匹配 RE pattern字符串 带有可选的标志 .

这是此函数的语法 -

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

这是参数的说明 -

Sr.No. 参数及说明
1

模式

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

2

字符串

这是字符串,它将被搜索以匹配字符串开头的模式。

3

标志

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

re.match 函数返回一个匹配 对象成功, 关于失败。我们使用group(num)groups() 匹配的功能 对象来获取匹配的表达式。

Sr.No. 匹配对象方法和描述
1

组(num=0)

此方法返回整个匹配(或特定子组编号)

2

组()

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

示例

现场演示
#!/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

搜索 功能

此函数搜索第一次出现的 RE pattern字符串 内 带有可选的标志 .

这是此函数的语法 -

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

这是参数的说明 -

Sr.No. 参数及说明
1

模式

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

2

字符串

这是字符串,它将被搜索以匹配字符串中任何位置的模式。

3

标志

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

re.search 函数返回一个匹配 对象成功, 关于失败。我们使用 group(num) groups() 匹配的功能 对象来获取匹配的表达式。

Sr.No. 匹配对象方法和描述
1

组(num=0)

此方法返回整个匹配(或特定子组编号)

2

组()

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

示例

现场演示
#!/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

匹配与搜索

Python 提供了两种不同的基于正则表达式的原始操作:match 仅在字符串的开头检查匹配项,而 search 检查字符串中任何地方的匹配项(这是 Perl 默认所做的)。

示例

现场演示
#!/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

搜索和替换

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

语法

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

此方法替换所有出现的 RE pattern字符串repl , 替换所有出现,除非 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. 修饰符和说明
1

re.I

执行不区分大小写的匹配。

2

re.L

根据当前语言环境解释单词。这种解释会影响字母组(\w 和 \W),以及单词边界行为(\b 和 \B)。

3

re.M

使 $ 匹配一行的结尾(不仅仅是字符串的结尾)并使 ^ 匹配任何行的开头(不仅仅是字符串的开头)。

4

re.S

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

5

re.U

根据 Unicode 字符集解释字母。该标志会影响 \w、\W、\b、\B 的行为。

6

re.X

允许“更可爱”的正则表达式语法。它忽略空格(除了在集合 [] 内或被反斜杠转义时)并将未转义的 # 视为注释标记。

正则表达式模式

除了控制字符,(+ ? . * ^ $ ( ) [ ] { } | \) , 所有字符都匹配自己。您可以通过在控制字符前面加上反斜杠来转义它。

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

Sr.No. 图案&描述
1

^

匹配行首。

2

$

匹配行尾。

3

匹配除换行符以外的任何单个字符。使用 m 选项也可以匹配换行符。

4

[...]

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

5

[^...]

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

6

重新*

匹配 0 次或多次出现的前面表达式。

7

重新+

匹配 1 次或多次出现的前面表达式。

8

是吗?

匹配 0 或 1 次出现的前面表达式。

9

重新{ n}

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

10

重新{ n,}

匹配 n 次或多次出现的前面表达式。

11

重新{ n, m}

匹配至少 n 次和最多 m 次出现的前面表达式。

12

一个| b

匹配 a 或 b。

13

(重新)

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

14

(?imx)

临时切换正则表达式中的 i、m 或 x 选项。如果在括号中,则只有该区域受到影响。

15

(?-imx)

暂时关闭正则表达式中的 i、m 或 x 选项。如果在括号中,则只有该区域受到影响。

16

(?:重新)

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

17

(?imx:re)

暂时打开括号内的 i、m 或 x 选项。

18

(?-imx:re)

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

19

(?#...)

评论。

20

(?=重新)

使用模式指定位置。没有范围。

21

(?!重新)

使用模式否定指定位置。没有范围。

22

(?> 重新)

匹配独立模式而不回溯。

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 等

匹配换行符、回车符、制表符等

36

\1...\9

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

37

\10

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

正则表达式示例

文字字符

Sr.No. 示例和说明
1

蟒蛇

匹配“python”。

字符类

Sr.No. 示例和说明
1

[Pp]ython

匹配“Python”或“python”

2

擦[耶]

匹配“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. 示例和说明
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. 示例和说明
1

红宝石?

匹配“rub”或“ruby”:y是可选的

2

红宝石*

匹配“rub”加0个或多个ys

3

红宝石+

匹配“rub”加1个或多个ys

4

\d{3}

精确匹配 3 位数字

5

\d{3,}

匹配 3 个或更多数字

6

\d{3,5}

匹配 3、4 或 5 位数字

非贪婪重复

这匹配最少的重复次数 -

Sr.No. 示例和说明
1

<.*>

贪婪重复:匹配“perl>”

2

<.*?>

Nongreedy:匹配“perl>”中的“

用括号分组

Sr.No. 示例和说明
1

\D\d+

无组:+ 重复 \d

2

(\D\d)+

分组:+重复\D\d对

3

([Pp]ython(, )?)+

匹配“Python”、“Python、python、python”等

反向引用

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

Sr.No. 示例和说明
1

([Pp])ython&\1ails

匹配 python&pails 或 Python&Pails

2

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

单引号或双引号字符串。 \1 匹配第一组匹配的任何内容。 \2 匹配第二组匹配的任何内容,等等。

替代方案

Sr.No. 示例和说明
1

python|perl

匹配“python”或“perl”

2

擦(y|le))

匹配“红宝石”或“卢布”

3

Python(!+|\?)

“Python”后跟一个或多个!还是一个?

锚点

这需要指定匹配位置。

Sr.No. 示例和说明
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. 示例和说明
1

R(?#comment)

匹配“R”。剩下的都是评论

2

R(?i)uby

匹配“uby”时不区分大小写

3

R(?i:uby)

同上

4

擦(?:y|le))

仅分组而不创建 \1 反向引用


Python

  1. Python 数据类型
  2. Python 运算符
  3. Python pass 语句
  4. Python 函数参数
  5. Python字典
  6. Python 迭代器
  7. Python 闭包
  8. Python 正则表达式
  9. Python 日期时间
  10. Java - 正则表达式
  11. C# - 正则表达式
  12. Python - 概述