re是regular expression(简称regex)的头两个字母,是正则表达式的意思
正则表达式为高级的文本模式匹配,抽取、与/或文本形式的搜索和替换功能提供了基础;简单的说,正则表达式是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于是正则表达式能按照某种模式匹配一系列有相似特征的字符串
搜索(searching)和匹配(matching)是正则表达式里两个重要的概念
在Python术语中,有两种方法完成模式匹配(pattern-matching):
1)搜索:在字符串的任意部分搜索匹配的模式,在Python中通过search()
函数或方法实现
2)匹配:判断一个字符能否从起始位处全部或者部分的匹配某个模式,在Python中通过match()
函数或方法实现
总之,当涉及模式时,全部使用术语『模式匹配』(简称『匹配』),我们按照Python如何完成匹配的方式来区分『搜索』和『匹配』
元字符(metacharacter)是正则表达式王国中的一群有着特殊含义的符号或字符,正是它们赋予了正则表达式强大的功能和灵活性
1)literal
:匹配文本字符串的字面值literal
foo
2)re1|re2
:匹配正则表达re1或re2
foo1|foo2
3).
:匹配任何字符(除了\n之外)
b.b
4)^
:匹配字符串起始部分
^Dear
5)$
:匹配字符串终止部分
/bin/*sh$
6)*
:匹配0次或多次前面出现的正则表达式
[A-Za-z0-9]*
7)+
:匹配1次或多次前面出现的正则表达式
[a-z]+\.com
8)?
:匹配0次或1次前面出现的正则表达式
goo?
9){N}
:匹配N次前面出现的正则表达式
[0-9]{3}
10){M,N}
:匹配M~N次前面出现的正则表达式
[0-9]{5,9}
11)[...]
:匹配来自字符集的任意单一字符
[aeiou]
12)[..x-y..]
:匹配x~y范围的任意单一字符
[0-9],[A-Za-z]
13)[^...]
:不匹配此字符集中出现的任意单一字符,但包括某一范围的字符(如果在此字符集中出现)
[^aeiou],[^A-Za-z0-9]
14)(*|+|?|{})?
:用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{})
.*[a-z]
15)(...)
:匹配封闭的正则表达式,然后另存为子组
([0-9]{3})?,f(oo|u)bar
1)\d
:匹配任何十进制数字,与[0-9]一致
2)\w
:匹配任何字母数字字符,与[A-Za-z0-9]一致
3)\s
:匹配任何空格字符,与[\n\t\r\v\f]一致
4)\b
:匹配任何单词边界
5)|N
:匹配已保存的子组N
6)\c
:逐字匹配任何特殊字符c(即按照字面意思匹配,不匹配特殊含义)
7)\A(\Z)
:匹配字符串的起始(结束),参考^和$
1)(?iLmsux)
:在正则表达式中嵌入一个或多个特殊标记参数(或者通过函数方法)
2)`(?:...)
:表示一个匹配不用保存的分组
3)(?P
:像一个仅由name标识而不是数字ID表示的正则分组
4)(?P=name)
:在同一字符串中匹配由(?P< name >)分组的之前文本
5)(?#...)
:表示注释,所有内容都被忽略
6)(?=...)
:匹配条件是如果…出现在之后的位置,而不使用输入字符串:称作正向前视断言
7)(?!...)
:匹配条件是如果…不出现在之后的位置,而不使用输入字符串:称作负向前视断言
8)(?<=...)
:匹配条件是如果…出现在之前的位置,而不使用输入字符串:称作正向后视断言
9)(?:匹配条件是如果…出现在之前的位置,而不使用输入字符串:称作负向后视断言
10)(?(id/name)Y|N)
:如果分组所提供的id或者name(名称存在),就返回正则表达式的条件匹配Y,如果不存在,就返回N:|N是可选项
使用re
模块前先要导入该模块
>>> import re
re.compile(pattern)
re.compile(pattern)
函数用来创建一个模式对象
re.search(pattern, string)
re.search(pattern, string)
函数用来在字整个符串中寻找模式
pattern_obj.search(string)
是它的等价写法
re.match(pattern, string)
re.match(pattern, string)
函数用来在字符串开始位置匹配模式
pattern_obj.match(string)
是它的等价写法
re.split(pattern, string)
re.split(pattern, string)
函数根据模式分割字符串,返回列表
pattern_obj.aplit(string)
是它的等价写法
re.findall(pattern, string)
re.findall(pattern, string)
函数以列表形式返回匹配项
pattern_obj.findall(string)
是它的等价写法
re.sub(pattern, repl, string, count=0, flags=0)
re.sub(pattern, repl, string, count=0, flags=0)
函数利用正则表达式实现字符串的替换
参数解释:patten
:匹配模式,repl
:被替换字符串,string
:待处理字符串(包含repl),count
:限定替换次数(默认替换所有),flags
:匹配模式
pattern_obj.sub(repl, string)
是它的等价写法