概念解释
正则表达式(Regular Expressions,简称regex或regexp)是一种用于匹配字符串的模式。它是一种强大的文本处理工具,可以用来查找、替换和验证字符串。正则表达式由特定的字符和符号组成,这些字符和符号定义了匹配规则。
在Python中,正则表达式通过内置的 re
模块来实现。
基本语法
-
字符匹配:
.
:匹配任意单个字符(除换行符外)。\d
:匹配任意一个数字(0-9)。\D
:匹配任意一个非数字字符。\w
:匹配任意一个字母、数字或下划线。\W
:匹配任意一个非字母、数字或下划线字符。\s
:匹配任意一个空白字符(空格、制表符、换行符等)。\S
:匹配任意一个非空白字符。
-
量词:
*
:匹配前面的字符0次或多次。+
:匹配前面的字符1次或多次。?
:匹配前面的字符0次或1次。{n}
:匹配前面的字符恰好n次。{n,}
:匹配前面的字符至少n次。{n,m}
:匹配前面的字符至少n次,最多m次。
-
边界匹配:
^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词边界。\B
:匹配非单词边界。
-
分组和捕获:
(...)
:捕获匹配的子字符串。(?:...)
:非捕获分组。(?P<name>...)
:命名捕获分组。
-
特殊字符:
[]
:字符集,匹配方括号内的任意一个字符。[^]
:否定字符集,匹配不在方括号内的任意一个字符。|
:或,匹配两个或多个表达式中的一个。
常用方法
re.search(pattern, string)
:在字符串中搜索匹配正则表达式的第一个位置,并返回一个匹配对象。re.match(pattern, string)
:从字符串的开头开始匹配正则表达式,如果匹配成功,返回一个匹配对象。re.findall(pattern, string)
:返回字符串中所有匹配正则表达式的子字符串,返回一个列表。re.finditer(pattern, string)
:返回一个迭代器,包含所有匹配的匹配对象。re.sub(pattern, repl, string)
:在字符串中替换所有匹配正则表达式的子字符串。re.split(pattern, string)
:根据正则表达式分割字符串,返回一个列表。
编程示例
示例1:基本匹配
import re
text = "Hello, World!"
pattern = r"Hello"
match = re.search(pattern, text)
if match:
print("匹配成功:", match.group())
else:
print("匹配失败")
示例2:匹配数字
import re
text = "There are 123 apples and 456 oranges."
pattern = r"\d+"
matches = re.findall(pattern, text)
print("匹配的数字:", matches)
示例3:替换字符串
import re
text = "Hello, World!"
pattern = r"World"
repl = "Python"
new_text = re.sub(pattern, repl, text)
print("替换后的字符串:", new_text)
示例4:分组和捕获
import re
text = "Name: Alice, Age: 30"
pattern = r"Name: (\w+), Age: (\d+)"
match = re.search(pattern, text)
if match:
name = match.group(1)
age = match.group(2)
print("名字:", name)
print("年龄:", age)
示例5:命名捕获分组
import re
text = "Name: Alice, Age: 30"
pattern = r"Name: (?P<name>\w+), Age: (?P<age>\d+)"
match = re.search(pattern, text)
if match:
name = match.group("name")
age = match.group("age")
print("名字:", name)
print("年龄:", age)
原始字符串(r-string)
在Python中,原始字符串(raw string)是一种特殊的字符串,用前缀 r
或 R
表示。原始字符串中的反斜杠 \
不会被转义,而是被视为普通字符。这在处理正则表达式时非常有用,因为正则表达式中经常使用反斜杠。
pattern = r"\d+" # 原始字符串,\d 不会被转义
正则表达式的应用场景
- 数据验证:验证用户输入的格式是否正确,如电子邮件地址、电话号码等。
- 文本处理:从大段文本中提取特定信息,如从网页中提取链接、从日志文件中提取错误信息等。
- 字符串替换:根据特定模式替换字符串中的内容。
- 数据清洗:清洗和标准化数据,去除不必要的字符或格式化数据。
总结
正则表达式是一种强大的文本处理工具,通过 re
模块,Python提供了丰富的正则表达式功能。通过上述示例,我们可以看到正则表达式在字符串匹配、查找、替换等方面的应用。