简介
正则表达式(或 RE)是一种小型的、高度专业化的编程语言,它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,
然后由用 C 编写的匹配引擎执行。
正则表达式由普通字符,元字符组成 |
. | 点 | 在普通模式中它匹配除换行符以外的任何字符 |
^ | 尖尖号 | 匹配字符串的开始 |
$ | 美元符 | 匹配字符串的结尾或字符串后面的换行符 |
* | 星号 | 指定将前面的RE重复0或任意次,总是试图匹配尽量多的 |
+ | 加号 | 指定将前面的RE重复1或任意次,总是试图匹配尽量多的 |
? | 问号 | 指定将前面的RE重复0或1次,如果有也尽量匹配1次 |
{} | 大括号 | 批定将前面的RE重复几次或,n,m n到m次 |
[ab1-9] | 或 |
匹配中括号内的a或b或1或2或3或4或5或6或7或8或9 ^号放处方括号为取反 |
| | 或 | 前面的表达式或后面的表达式 |
反斜线
转义一些特殊字符后跟元字符去除特殊功能后跟普通字符实现特殊功能
d | 匹配数字 |
D | 匹配所有非数字 |
s |
匹配所有空字符 |
S | 匹配所有非空字符 |
w | 匹配所有字母数字 |
W | 匹配任何非字母数字 |
匹配单词边界 |
RE模块提供的功能
str = re.findall(正则表达式 , 要匹配的字符串)
返回一个匹配的字符列表,如果正则表达式中有分组的话会返回分组内的内容
str = re.search(正则表达式 , 要匹配的字符串)
返回找到的第一个结果,这个结果为一个 match object 对象有以下功能
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元组包含匹配(开始,结束)的位置 |
group() |
import re a = "123abc456" print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)) #123abc456,返回整体 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)) #123 print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)) #abc print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)) #456 ###group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。### |
groups() | groups() 方法返回一个包含正则表达式中所有小组字符串的元组,从 1 到所含的小组号,通常groups()不需要参数,返回一个元组,元组中的元就是正则表达式中定义的组。 |
groupdict() |
import re cabc = 'one1toue3three4fore6' fd = re.match('(?P<n1>w)(?P<n2>w)(?P<n3>w)(?P<n4>w)',cabc) print(fd.groupdict()) #输出 #{'n1': 'o', 'n4': '1', 'n2': 'n', 'n3': 'e'} |
str = re.meach正则表达式 , 要匹配的字符串)
在开始位置匹配其它功能同上
finditer()
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。找到 RE 匹配的所有子串,并把它们作为一个迭代器返 回。
格式:re.finditer(pattern, string, flags=0)
split()
按照能够匹配的子串将string分割后返回列表。
可以使用re.split来分割字符串,如:re.split(r's+', text);将字符串按空格分割成一个单词列表。
re.split(pattern, string[, maxsplit])
maxsplit用于指定最大分割次数,不指定将全部分割。
print(re.split('d+','one1two2three3four4five5')) 执行结果如下: ['one', 'two', 'three', 'four', 'five', '']
sub()
使用re替换string中每一个匹配的子串后返回替换后的字符串。
格式:
re.sub(pattern, repl, string, count)
import re text = "JGood is a handsome boy, he is cool, clever, and so on..." print(re.sub(r's+', '-', text)) 执行结果如下: JGood-is-a-handsome-boy,-he-is-cool,-clever,-and-so-on...
其中第二个函数是替换后的字符串;本例中为'-'
第四个参数指替换个数。默认为0,表示每个匹配项都替换。
compile()
编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
格式:re.compile(pattern,flags=0)
pattern: 编译时用的表达式字符串。
flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。常用的flags有:
标志 |
含义
|
re.S(DOTALL)
|
使.匹配包括换行在内的所有字符 |
re.I(IGNORECASE)
|
使匹配对大小写不敏感
|
re.L(LOCALE)
|
做本地化识别(locale-aware)匹配,法语等
|
re.M(MULTILINE)
|
多行匹配,影响^和$
|
re.X(VERBOSE)
|
该标志通过给予更灵活的格式以便将正则表达式写得更易于理解
|
re.U
|
根据Unicode字符集解析字符,这个标志影响w,W,,B
|