Python 正则表达式练习

1. 正则表达式介绍

正则表达式(Regular Expression)是一种字符串处理语言,可以用于快速地检索、替换和分割文本。Python 语言内置有 re 模块,可以使用正则表达式。

正则表达式的语法非常复杂,可以匹配特定模式的字符串,包括数字、字母、符号等。在正则表达式中,可以使用*?+等特殊符号来表示数量和位置,进而匹配更加复杂的字符串。

import re

text = "The quick brown fox jumps over the lazy dog."

pattern = "fox"

result = re.search(pattern, text)

print(result)

上面的代码使用 Python re 模块中的 search() 函数在字符串中查找指定的模式。

对于上面的代码,可以看到输出结果为 <re.Match object; span=(16, 19), match='fox'>,表示在字符串中匹配到了模式,匹配的位置是(16, 19),也就是从第 16 个字符开始,长度为 3。

2. 正则表达式语法

2.1 元字符

元字符指的是正则表达式中具有特殊含义的字符,例如 .?* 等。

. 表示任意字符。

? 表示匹配 zero 或 one 次。

* 表示匹配 zero 或多次。

+ 表示匹配 one 或多次。

| 表示“或”。

例如下面的代码可以匹配字符串中的数字:

import re

text = "123abc456"

pattern = r"\d+"

result = re.findall(pattern, text)

print(result)

对于上面的代码,可以看到输出结果为 ['123', '456'],表示在字符串中匹配到了两个数字。

2.2 字符类

字符类指的是一组可以用来匹配单个字符的字符。能够使用字符类的位置就是在方括号内。

[ABC] 表示匹配 A、B 或 C 中的任何一个。

[A-Z] 表示匹配大写字母(A~Z)中的任何一个。

[a-z] 表示匹配小写字母(a~z)中的任何一个。

[0-9] 表示匹配数字(0~9)中的任何一个。

例如下面的代码可以匹配字符串中的大写字母:

import re

text = "The quick brown fox jumps over the lazy dog."

pattern = r"[A-Z]"

result = re.findall(pattern, text)

print(result)

对于上面的代码,可以看到输出结果为 ['T'],表示在字符串中匹配到一个大写字母。

2.3 边界匹配

边界匹配指的是匹配输入字符串的边界位置。

^ 表示匹配输入字符串的开始位置。

$ 表示匹配输入字符串的结束位置。

\b 表示匹配单词的边界。

\B 表示匹配非单词的边界。

例如下面的代码可以匹配字符串中以数字开头的字符串:

import re

text = "123abc456"

pattern = r"^\d"

result = re.findall(pattern, text)

print(result)

对于上面的代码,可以看到输出结果为 ['1'],表示在字符串开头匹配到了一个数字。

2.4 捕获匹配

捕获匹配指的是使用圆括号来分组匹配指定的字符,可以在后面通过引用组名来获取匹配的内容。

例如下面的代码可以匹配邮箱地址,并将用户名和域名分别进行捕获:

import re

text = "someone@gmail.com"

pattern = r"(\w+)@(\w+)\.com"

result = re.match(pattern, text)

print(result.group(1))

print(result.group(2))

对于上面的代码,可以看到输出结果为 someonegmail,表示用户名和域名分别被捕获成功。

3. 正则表达式练习

下面提供一些正则表达式练习题,供读者练习。

3.1 匹配 IP 地址

编写一个正则表达式,匹配 IPv4 地址。

import re

pattern = r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$"

print(re.match(pattern, "192.168.1.1"))

print(re.match(pattern, "0.0.0.0"))

print(re.match(pattern, "255.255.255.255"))

print(re.match(pattern, "192.168.1.256"))

对于上面的代码,可以看到输出结果为:

<re.Match object; span=(0, 11), match='192.168.1.1'>

<re.Match object; span=(0, 7), match='0.0.0.0'>

<re.Match object; span=(0, 15), match='255.255.255.255'>

None

3.2 匹配 URL

编写一个正则表达式,匹配 URL。

import re

pattern = r"^(?:http|https|ftp)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(?:\/\S*)?$"

print(re.match(pattern, "http://www.baidu.com"))

print(re.match(pattern, "https://www.google.com/"))

print(re.match(pattern, "ftp://ftp.microsoft.com/pub/"))

print(re.match(pattern, "www.google.com"))

对于上面的代码,可以看到输出结果为:

<re.Match object; span=(0, 18), match='http://www.baidu.com'>

<re.Match object; span=(0, 19), match='https://www.google.com/'>

<re.Match object; span=(0, 32), match='ftp://ftp.microsoft.com/pub/'>

None

3.3 匹配 HTML 标签

编写一个正则表达式,匹配 HTML 标签。

import re

pattern = r"<\/?[a-z]+(?:\s*[a-z]+\s*\=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))*\s*>"

print(re.findall(pattern, "

Python正则表达式

"))

print(re.findall(pattern, "

Python是一种强大的编程语言。"))

对于上面的代码,可以看到输出结果为:

['<h1>', '</h1>']

["<p class='intro'>", '</p>']

4. 总结

本文主要介绍了 Python 的正则表达式,并给出了一些练习题。读者可以通过本文了解到正则表达式的基本语法和使用方法,从而在实际开发中应用正则表达式来处理字符串。

正则表达式是一项非常复杂和强大的技能,需要不断地练习和实践才能掌握,希望读者能够善加利用,并在实际开发中得到运用。

后端开发标签