返回

正则表达式的进阶用法:6个实践场景

前端

正则表达式的进阶用法:6个实践场景

前言

正则表达式,毋庸置疑,是一个无比强大的工具。如果仔细留意,我们可以在源代码(各种语言)、编辑器、开发者工具、命令行等地方看到正则的身影。学习使用正则,不仅有趣,也是提升工作效率的一条捷径。

正则的常用概念可以参考下表,主要熟记字符类型、锚点、转义字符、量词等。

符号 名称 说明
\d 数字 匹配任何数字字符
\w 单词字符 匹配任何字母、数字或下划线字符
\s 空白字符 匹配任何空白字符,包括空格、制表符、换行符等
\t 制表符 匹配制表符
\n 换行符 匹配换行符
^ 行首 匹配字符串的开头
$ 行尾 匹配字符串的结尾
. 任意字符 匹配任何单个字符
* 重复0次或多次 匹配前面的字符0次或多次
+ 重复1次或多次 匹配前面的字符1次或多次
? 重复0次或1次 匹配前面的字符0次或1次
{} 指定重复次数 匹配前面的字符指定次数

基础用法相信大家都很快掌握了,接下来我们来看几个正则表达式在实践中的应用场景。

场景一:提取字符串中的数字

如果我们想从一个字符串中提取所有的数字,可以使用正则表达式 \d+。例如,对于字符串 "Hello123World456",我们可以使用正则表达式 \d+ 来提取数字 "123""456"

import re

string = "Hello123World456"
pattern = re.compile(r"\d+")
matches = pattern.findall(string)

print(matches)

输出结果:

['123', '456']

场景二:验证电子邮件地址

为了确保电子邮件地址的格式正确,我们可以使用正则表达式 ^[\w\.-]+@[\w\.-]+\.\w+$ 来验证。该正则表达式匹配以字母、数字或下划线开头的字符串,然后是 @ 符号,然后是另一个以字母、数字或下划线开头的字符串,然后是.,然后是另一个字母、数字或下划线开头的字符串。

import re

email = "someone@example.com"
pattern = re.compile(r"^[\w\.-]+@[\w\.-]+\.\w+
import re

email = "someone@example.com"
pattern = re.compile(r"^[\w\.-]+@[\w\.-]+\.\w+$")
match = pattern.match(email)

if match:
    print("Email address is valid")
else:
    print("Email address is invalid")
quot;
) match = pattern.match(email) if match: print("Email address is valid") else: print("Email address is invalid")

输出结果:

Email address is valid

场景三:替换字符串中的子字符串

如果我们想在一个字符串中替换所有的子字符串,可以使用正则表达式 re.sub() 方法。例如,对于字符串 "Hello123World456",我们可以使用正则表达式 \d+ 来替换数字 "123""456""***"

import re

string = "Hello123World456"
pattern = re.compile(r"\d+")
new_string = re.sub(pattern, "***", string)

print(new_string)

输出结果:

Hello***World** *

场景四:分割字符串

如果我们想把一个字符串按照某种规则分割成多个子字符串,可以使用正则表达式 re.split() 方法。例如,对于字符串 "Hello,World,How,Are,You",我们可以使用正则表达式 , 来把字符串分割成多个子字符串。

import re

string = "Hello,World,How,Are,You"
pattern = re.compile(r",")
substrings = re.split(pattern, string)

print(substrings)

输出结果:

['Hello', 'World', 'How', 'Are', 'You']

场景五:查找字符串中的匹配项

如果我们想在一个字符串中查找所有的匹配项,可以使用正则表达式 re.findall() 方法。例如,对于字符串 "Hello123World456",我们可以使用正则表达式 \d+ 来查找所有的数字。

import re

string = "Hello123World456"
pattern = re.compile(r"\d+")
matches = re.findall(pattern, string)

print(matches)

输出结果:

['123', '456']

场景六:贪婪匹配和非贪婪匹配

在正则表达式中,我们可以使用 *+? 来指定匹配的次数。默认情况下,正则表达式是贪婪的,这意味着它会尽可能多地匹配字符。但是,我们可以使用 ? 来指定非贪婪匹配,这