正则表达式的进阶用法:6个实践场景
2023-12-07 13:23:42
正则表达式的进阶用法: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']
场景六:贪婪匹配和非贪婪匹配
在正则表达式中,我们可以使用 *
、+
和 ?
来指定匹配的次数。默认情况下,正则表达式是贪婪的,这意味着它会尽可能多地匹配字符。但是,我们可以使用 ?
来指定非贪婪匹配,这