1、re模块(Module)
Python有一个名为re
的内置包,它可用于处理正则表达式。
导入re
模块:
import re
2、Python中正则表达式(RegEx)
导入re
模块后,可以开始使用正则表达式:
例如:
搜索字符串以查看它是否以"The"开头并以"cjavapy"结尾:
import re
txt = "The website is cjavapy"
x = re.search("^The.*cjavapy$", txt)
3、re模块函数方法
re
模块提供了一组函数,使我们可以在字符串中搜索匹配项:
函数 | 描述 |
findall | 返回包含所有匹配项的列表 |
search | 如果字符串中任何地方都存在匹配项,则返回Match对象 |
split | 返回一个列表,该字符串在每次匹配时均已拆分 |
sub | 用字符串替换一个或多个匹配项 |
4、元字符(Metacharacters)
元字符是具有特殊含义的字符:
元字符 | 描述 | 示例 |
| 一组字符 | "[a-m]" |
| 发出特殊序列的信号(也可以用于转义特殊字符) | "\d" |
| 任何字符(换行符除外) | "he..o" |
| 匹配一行的开头位置 | "^hello" |
| 匹配一行的结束位置 | "world$" |
| 零次或更多次 | "aix*" |
| One or more occurrences | "aix+" |
| 一次或多次出现 | "al{2}" |
| 两者任一 | "falls|stays" |
| 捕获和组 |
5、特殊字符
特殊字符是\
,后跟下面列表中的字符之一,并且具有特殊含义:
字符 | 描述 | 示例 |
| 如果指定的字符在字符串的开头,则返回匹配项 | "\AThe" |
| 返回一个匹配项, 其中指定的字符位于单词的开头或结尾 (开头的“ r”确保该字符串被视为“原始字符串”) | r"\bain"r"ain\b" |
| 返回包含指定字符的匹配, 但不包含在单词的开头(或结尾) (开头的“r”确保将该字符串作为"raw string"处理) | r"\Bain"r"ain\B" |
| 返回字符串包含数字(0到9之间的数字)的匹配项 | "\d" |
| 返回字符串不包含数字的匹配项 | "\D" |
| 返回字符串包含空格字符的匹配项 | "\s" |
| 返回字符串不包含空格字符的匹配项 | "\S" |
| 返回一个匹配项,该字符串包含任何单词字符 (从a到Z的字符,0-9的数字和下划线_字符) | "\w" |
| 返回一个匹配项,其中字符串不包含任何单词字符 | "\W" |
| 如果指定的字符位于字符串的末尾,则返回匹配项 | "Spain\Z" |
6、集合
集合是在方括号[]
中的一组字符,它们具有特殊含义:
集合 | 描述 |
| 返回存在指定字符( |
| 返回任何小写字符的匹配项,按字母顺序在 |
| 返回除 |
| 返回存在任何指定数字( |
| 返回 |
| 返回 |
| 返回 |
| 设置为 因此 |
7、findall()函数
findall()
函数返回包含所有匹配项的列表。
例如:
打印所有匹配项的列表:
import re
txt = "my name is cjavapy"
x = re.findall("am", txt)
print(x)
该列表按找到匹配项的顺序包含匹配项。
如果找不到匹配项,则返回一个空列表:
例如:
如果找不到匹配项,则返回一个空列表:
import re
txt = "my name is cjavapy"
x = re.findall("python", txt)
print(x)
8、search()函数
search()
函数搜索匹配的字符串,如果有匹配,则返回一个匹配对象。
如果有多个匹配项,则仅返回匹配项的第一个匹配项:
例如:
搜索字符串中的第一个空格字符:
import re
txt = "my name is cjavapy"
x = re.search("\s", txt)
print("第一个空白字符位置:", x.start())
如果找不到匹配项,则返回值None
:
例如:
做一个搜索,返回不匹配:
import re
txt = "my name is cjavapy"
x = re.search("python", txt)
print(x)
9、split()函数
split()
函数返回一个列表,其中字符串已分割在每个匹配:
例如:
在每个空格字符处分割:
import re
txt = "my name is cjavapy"
x = re.split("\s", txt)
print(x)
可以通过指定maxsplit
参数来控制出现次数:
例如:
仅在第一次出现时才拆分字符串:
import re
txt = "my name is cjavapy"
x = re.split("\s", txt, 1)
print(x)
10、sub()函数
sub()
函数用选择的文本替换匹配:
例如:
将每个空白字符替换为数字7:
import re
txt = "my name is cjavapy"
x = re.sub("\s", "7", txt)
print(x)
可以通过指定count
参数来控制替换次数:
例如:
替换前两个事件:
import re
txt = "my name is cjavapy"
x = re.sub("\s", "7", txt, 2)
print(x)
11、Match 对象(Object)
匹配对象是包含有关搜索和结果信息的对象。
注意:如果没有匹配项,则将返回值None
,而不是Match Object。
例如:
进行搜索以返回匹配对象:
import re
txt = "my name is cjavapy"
x = re.search("am", txt)
print(x) #输出的是一个对象
匹配对象具有用于检索有关搜索信息的属性和方法,以及结果:
.span()
返回一个包含匹配的开始和结束位置的元组。.string
返回传递给该函数的字符串.group()
返回字符串中存在匹配项的部分
例如:
打印第一个匹配项的位置(开始和结束位置)。 正则表达式查找以大写字母“C”开头的所有单词:
import re
txt = "my name is Cjavapy"
x = re.search(r"\bC\w+", txt)
print(x.span())
例如:
打印传递给函数的字符串:
import re
txt = "my name is Cjavapy"
x = re.search(r"\bC\w+", txt)
print(x.string)
例如:
打印匹配的字符串部分。 正则表达式查找以大写字母“C”开头的所有单词:
import re
txt = "my name is Cjavapy"
x = re.search(r"\bC\w+", txt)
print(x.group())
注意:如果没有匹配项,则将返回值None
,而不是Match Object。