Python正则表达式详解
1. Python中的正则表达式
导入re模块后,您可以开始使用正则表达式。
例如:搜索字符串以查看它是否以“The”开头并以“Spain”结尾:
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
if x:
print("匹配成功")
else:
print("匹配失败")
运行:
2. 正则表达式函数
2.1 findall() 函数
该findall()函数返回一个包含所有匹配项的列表。如果未找到匹配项,则返回一个空列表。
例如:打印所有匹配项的列表
txt = "木子Teng菜鸟啊菜鸟啊"
x = re.findall("菜鸟", txt)
print(x) # ['菜鸟', '菜鸟']
2.2 search() 函数
该search()函数在字符串中搜索匹配项,如果有匹配项,则返回一个Match 对象。如果有多个匹配项,则只返回匹配项的第一次出现。
如果未找到匹配项,则返回None。
例如:搜索字符串中的第一个空白字符:
import re
txt = "木子Teng 呢"
x = re.search("\s", txt)
print(f"第一个空格字符位于位置:{x.start()}") # 6
2.3 split() 函数
该split()函数返回一个列表,其中的字符串在每次匹配时被拆分。
例如:在每个空白字符处拆分
import re
txt = "木子 Teng 呢"
x = re.split("\s", txt)
print(x) # ['木子', 'Teng', '呢']
您可以通过指定maxsplit 参数来控制出现次数
例如:仅在第一次出现时拆分字符串:
txt = "木子 Teng 呢"
x = re.split("\s", txt, 1)
print(x) # ['木子', 'Teng 呢']
2.4 sub() 函数
该sub()函数用您选择的文本替换匹配项。
例如,将木替换为水
import re
txt = "木子Teng"
x = re.sub("木", "水", txt)
print(x) # 水子Teng
您可以通过指定count 参数来控制替换次数 :
txt = "木木子Teng"
x = re.sub("木", "水", txt, 1)
print(x) # 水木子Teng
3. 元字符
常用元字符的含义见下表
元字符 | 含义 |
---|---|
. | 匹配任意字符(除换行符\r,\n) |
^ | 匹配字符串的开始位置 |
$ | 匹配字符串的结束位置 |
* | 匹配该元字符的前一个字符任意出现次数(包括0次) |
+ | 匹配一次或者多次出现 |
\ | 转义字符,其后的一个元字符失去特殊含义,匹配字符本身 |
{} | 恰好指定的出现次数 |
[] | 字符集,范围内的所有字符都能被匹配 |
| | 匹配两者任一 |
上述元字符都比较好理解,这里不再进行演示。
4. 特殊序列
普通字符 | 含义 |
---|---|
\W | 匹配非数字、字母、下划线、汉字 |
\w | 匹配数字、字母、下划线、汉字 |
\S | 匹配任意非空白字符 |
\s | 匹配任意空白字符 |
\D | 匹配非数字 |
\d | 匹配数字 |
\A | 如果指定的字符位于字符串的开头,则返回匹配项。 |
\b | 返回指定字符位于单词开头或结尾的匹配项 。 |
\B | 返回存在指定字符但**不在单词开头(或结尾)**的匹配项 |
\Z | 指定的字符位于字符串的末尾,则返回匹配项 |
演示:
txt = "菜鸟在这里"
x = re.findall("\A菜", txt)
print(x) # ['菜']
txt = "菜鸟在这里"
# 开头的“r”确保字符串被视为原始字符串
x = re.findall(r"\b菜", txt) # 匹配开头
print(x) # ['菜']
x = re.findall(r"里\b", txt) # 匹配结尾
print(x) # ['里']
5. 匹配对象
匹配对象是包含有关搜索和结果的信息的对象。注意:如果没有匹配,None将返回值,而不是匹配对象。
直接举个例子:
执行将返回匹配对象的搜索
import re
#search() 函数返回一个 Match 对象:
txt = "hello world"
x = re.search("wo", txt)
print(x)
Match 对象具有用于检索有关搜索和结果的信息的属性和方法:
span()返回一个包含匹配开始和结束位置的元组。
string返回传递给函数的字符串
group()返回字符串中匹配的部分
5.1 span() 函数
例如:打印第一个匹配项的位置(开始和结束位置)。正则表达式查找任何以大写“S”开头的单词:
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span()) # (12,17)
print(x.string) # The rain in Spain
5.2 string 属性
例如:打印传递给函数的字符串
import re
#返回字符串
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string) # The rain in Spain
5.3 group() 函数
例如:打印字符串中匹配的部分。正则表达式查找任何以大写“S”开头的单词
import re
#搜索单词开头的大写“w”字符,并打印该单词:
txt = "hello world"
x = re.search(r"\bw\w+", txt)
print(x.group()) # world