Bootstrap

python基础之正则表达式

Python中的正则表达式(regular expressions,简称regex)是强大的字符串处理工具,用于搜索、匹配和替换字符串中的特定模式。Python通过 re 模块提供对正则表达式的支持。以下是对Python正则表达式的详细讲解。

基本概念和语法

导入模块
import re
基本函数
  • re.match(pattern, string): 从字符串的起始位置匹配模式。
  • re.search(pattern, string): 搜索整个字符串,返回第一个匹配的对象。
  • re.findall(pattern, string): 返回字符串中所有非重叠匹配的列表。
  • re.finditer(pattern, string): 返回字符串中所有非重叠匹配的迭代器。
  • re.sub(pattern, repl, string): 替换字符串中所有匹配的子串。
编译模式

可以通过 re.compile() 预编译正则表达式模式,提高匹配效率:

pattern = re.compile(r'\d+')
result = pattern.findall('123 abc 456')
print(result)  # ['123', '456']

常用正则表达式符号

字符匹配
  • .: 匹配除换行符以外的任意字符。
  • \d: 匹配任意数字,相当于 [0-9]
  • \D: 匹配任意非数字字符。
  • \w: 匹配字母、数字和下划线,相当于 [a-zA-Z0-9_]
  • \W: 匹配任意非字母、数字和下划线的字符。
  • \s: 匹配空白字符(包括空格、制表符、换页符等)。
  • \S: 匹配非空白字符。
边界匹配
  • ^: 匹配字符串的开头。
  • $: 匹配字符串的结尾。
  • \b: 匹配单词边界。
  • \B: 匹配非单词边界。
量词
  • *: 匹配前面的字符0次或多次。
  • +: 匹配前面的字符1次或多次。
  • ?: 匹配前面的字符0次或1次。
  • {n}: 匹配前面的字符恰好n次。
  • {n,}: 匹配前面的字符至少n次。
  • {n,m}: 匹配前面的字符至少n次,至多m次。
分组
  • (...): 匹配括号内的正则表达式,并形成一个组。
  • (?:...): 匹配括号内的正则表达式,但不形成组。
特殊转义字符
  • \\: 反斜杠,用于转义特殊字符。
  • \n: 匹配换行符。
  • \t: 匹配制表符。

示例

匹配手机号
import re

pattern = re.compile(r'1[3-9]\d{9}')
text = '我的手机号是13812345678,请联系我。'
match = pattern.search(text)
if match:
    print(match.group())  # 输出:13812345678
提取电子邮件地址
import re

pattern = re.compile(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')
text = '请发送邮件到 [email protected] 联系我们。'
emails = pattern.findall(text)
print(emails)  # 输出:['[email protected]']
替换文本中的URL
import re

pattern = re.compile(r'https?://[^\s]+')
text = '访问我们的官网 http://example.com 或 https://example.org 获取更多信息。'
new_text = pattern.sub('URL', text)
print(new_text)  # 输出:访问我们的官网 URL 或 URL 获取更多信息。

正则表达式标志

常用标志
  • re.IGNORECASEre.I: 忽略大小写。
  • re.MULTILINEre.M: 多行模式,^$ 匹配每一行的开头和结尾。
  • re.DOTALLre.S: 点号匹配包括换行符在内的任意字符。
  • re.VERBOSEre.X: 允许在正则表达式中使用空白符和注释,以增加可读性。

示例:

import re

pattern = re.compile(r"""
    \d+     # 匹配一个或多个数字
    \s      # 匹配一个空白符
    \w+     # 匹配一个或多个字母或数字
""", re.VERBOSE)
text = '123 abc'
match = pattern.search(text)
if match:
    print(match.group())  # 输出:123 abc

以上是Python正则表达式的详细讲解。正则表达式在文本处理、数据清洗和数据验证等方面非常有用。通过练习和熟悉各种模式和标志,可以大大提高处理字符串的效率和能力。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;