1. re模块简介
Python中的 re(Regular Expression)模块是处理正则表达式的模块,所有正则表达式的操作都由这个模块完成。正则表达式通常用来匹配字符串、替换字符串或者切割字符串。
1.1 re模块的用途
re模块的主要用途是进行文本匹配,常见的应用场景有以下几种:
验证用户的输入是否符合规则
从文本中提取需要的信息
替换文本中的某些字符或者文本
1.2 re模块常用方法
re模块中常用的方法有以下几种:
re.compile(pattern, flags=0):将一个字符串编译成正则表达式对象,用于匹配需要的文本。
re.search(pattern, string, flags=0):在字符串中搜索匹配正则表达式的第一个位置,并返回匹配的对象。
re.findall(pattern, string, flags=0):搜索字符串,以列表形式返回所有匹配的子串。
re.sub(pattern, repl, string, count=0, flags=0):在字符串中用一个新的字符串替换所有的匹配。
re.split(pattern, string, maxsplit=0, flags=0):使用正则表达式分隔字符串,返回分隔后的列表。
2. re模块基本使用方法
re模块的基本使用方法是将需要匹配的正则表达式通过使用re.compile函数编译成一个正则表达式对象,然后使用正则表达式对象中的方法进行文本匹配。
2.1 re模块中的匹配符号
re模块中常用的匹配符号有以下几种:
.:匹配除换行符以外的任意字符。
^:匹配字符串的开头。
$:匹配字符串的结尾。
*:匹配前面的字符0次或者多次。
+:匹配前面的字符1次或者多次。
?:匹配前面的字符0次或者1次。
{n}:匹配前面的字符n次。
{n,}:匹配前面的字符至少n次。
{n,m}:匹配前面的字符至少n次,至多m次。
\d:匹配任意数字。
\D:匹配任意非数字。
\w:匹配任意字母和数字。
\W:匹配任意非字母和数字。
\s:匹配任意空白字符。
\S:匹配任意非空白字符。
2.2 re模块的常用方法和实例分析
2.2.1 re.compile(pattern, flags=0)
将一个字符串编译成正则表达式对象,用于匹配需要的文本。
import re
pattern = re.compile('\d+')
result = pattern.findall('The price of the iPhone is 9999 yuan.')
print(result) # 输出 ['9999']
2.2.2 re.search(pattern, string, flags=0)
在字符串中搜索匹配正则表达式的第一个位置,并返回匹配的对象。
import re
pattern = '\d+'
string = 'The price of the iPhone is 9999 yuan.'
result = re.search(pattern, string)
print(result) # 输出 <_sre.SRE_Match object; span=(21, 25), match='9999'>
2.2.3 re.findall(pattern, string, flags=0)
搜索字符串,以列表形式返回所有匹配的子串。
import re
pattern = '\d+'
string = 'The price of the iPhone is 9999 yuan.'
result = re.findall(pattern, string)
print(result) # 输出 ['9999']
2.2.4 re.sub(pattern, repl, string, count=0, flags=0)
在字符串中用一个新的字符串替换所有的匹配。
import re
pattern = '\d+'
string = 'The price of the iPhone is 9999 yuan.'
result = re.sub(pattern, '8888', string)
print(result) # 输出 The price of the iPhone is 8888 yuan.
2.2.5 re.split(pattern, string, maxsplit=0, flags=0)
使用正则表达式分隔字符串,返回分隔后的列表。
import re
pattern = '\s+'
string = 'The price of the iPhone is 9999 yuan.'
result = re.split(pattern, string)
print(result) # 输出 ['The', 'price', 'of', 'the', 'iPhone', 'is', '9999', 'yuan.']
3. re模块的高级用法
re模块的高级用法可以通过正则表达式中的分组、替换、贪婪模式等特性进行实现。
3.1 re模块中的分组
re模块中的分组可以将正则表达式进行分组,每个分组可以单独匹配或者获取匹配结果。
import re
pattern = '(\d+)-(\w+)'
string = '2019-python'
result = re.search(pattern, string)
print(result.groups()) # 输出 ('2019', 'python')
3.2 re模块中的替换
re模块中的替换功能可以在匹配到的字符串中进行文本的替换或格式化。
import re
pattern = r'(\d+)-(\w+)'
string = '2019-python'
result = re.sub(pattern, r'year:\1 language:\2', string)
print(result) # 输出 year:2019 language:python
3.3 re模块中的贪婪模式和非贪婪模式
在正则表达式中,量词默认采用贪婪匹配,即按照最长匹配的方式进行文本匹配。而通过在量词后面加上问号(?)可以改为非贪婪匹配,即按照最短匹配的方式进行文本匹配。
import re
pattern = r'<.*>'
string = ', world!'
result = re.search(pattern, string)
print(result.group()) # 输出 , world!
pattern = r'<.*?>'
string = ', world!'
result = re.search(pattern, string)
print(result.group()) # 输出
贪婪模式和非贪婪模式的区别在于,贪婪模式会尽可能多地匹配,而非贪婪模式则只匹配到第一个匹配到的位置。
4. 总结
re模块是Python中处理正则表达式的重要模块,通过re模块可以方便地实现文本匹配、替换和分割等操作。在使用re模块时,需要掌握正则表达式中的基本语法和常用方法,并了解正则表达式中分组、替换和贪婪模式等特性,以提高re模块的使用效率。