Python学习笔记9:正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。
在Ptrhon中re模块使Python语言拥有全部的正则表达式功能。
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none,成功返回一个MatchObject。
函数语法:
re.match(pattern, string, flags=0)
实例代码:
>>> print(re.match("abc", "123abc"))
None
>>> re.match("abc", "abc")
<re.Match object; span=(0, 3), match="abc">
>>> re.match("a.c", "abc")
<re.Match object; span=(0, 3), match="abc">
>>> re.match("a.c", "a.c")
<re.Match object; span=(0, 3), match="a.c">
>>> re.match("a*c", "a*c")
<re.Match object; span=(0, 3), match="a*c">
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:
re.search(pattern, string, flags=0)
实例代码:
>>> re.search("abc", "abc")
<re.Match object; span=(0, 3), match="123abc">
>>> re.search("a.c", "abc")
<re.Match object; span=(0, 3), match="123abc">
>>> re.search("a.c", "a.c")
<re.Match object; span=(0, 3), match="123a.c">
>>> re.search("a*c", "a*c")
<re.Match object; span=(0, 3), match="123a*c">
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
re.compile函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern[, flags])
参数:
pattern : 一个字符串形式的正则表达式
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 w, W, , B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志。
>>>#查找所有的数字
>>> regex=re.compile(r"d+")
>>> regex.findall("12abc56py7hello")
["12", "56", "7"]
>>>
>>>##查找有wh的单词,不区分大小写
>>> re.findall(r"w*whw*","Who are you, what your name, when you go home", re.I)
["Who", "what", "when"]
>>> #等价于上面的
>>> regex=re.compile(r"w*whw*", re.I)
>>> regex.findall("Who are you, what your name, when you go home")
["Who", "what", "when"]
>>>
正则表达式对象
re.RegexObject
re.compile() 返回 RegexObject 对象。
re.MatchObject
group() 返回被 RE 匹配的字符串。
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置
正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r” “,等价于 ” “)匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。