正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为”元字符”)。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
元字符
正则表达式的元字符包括:
. 表示任意字符
^ 1.表示取非的意思;2.匹配输入字符串的开始位置
$ 匹配输入字符串的结尾位置
* 匹配前面的子表达式零次或多次
+ 对于前一个字符重复1到无穷次
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。
{m,n} 对于前一个字符重复次数在为m到n次,其中,{0,} = *,{1,} = , {0,1} = ?
{m} 对于前一个字符重复m次
{ 标记限定符表达式的开始
[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系
| 表示”或”,如A|B,其中A,B为正则表达式,表示匹配A或者B
() 标记一个子表达式的开始和结束位置
\b 匹配单词的结束或者结尾
\B 匹配不是单词的结束或者结尾
\d 匹配任何十进制数;它相当于类 [0-9]
\D 匹配任何非数字字符;它相当于类 [^0-9]
\s 匹配任何空白字符;它相当于类 [ fv]
\S 匹配任何非空白字符;它相当于类 [^ fv]
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]
[^a] 匹配除了a以外的任意字符
[^abcde]匹配除了a,b,c,d,e这几个字母以外的任意字符
[^(123|abc)] 匹配除了a,b,c或1,2,3这几个字符以外的任意字符
re模块
Python通过re模块提供对正则表达式的支持,使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果,最后使用Match实例获得信息,进行其他操作。
主要函数如下:
re.compile(string,flags)
把正则表达式的字符串化为Pattern匹配对象
re.match(pattern,string,flags)
尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功,就返回匹配对象; 如果失败,就返回 None- re.search(pattern,string,flags)
使用可选标记搜索字符串中第一次出现的正则表达式模式。 如果匹配成功,则返回匹配对象; 如果失败,则返回 None re.spilt(pattern,string , max)
根据正则表达式的模式分隔符, split函数将字符串分割为列表,然后返回成功匹配的列表,分隔最多操作 max 次(默认分割所有匹配成功的位置)
re.findall(pattern,string,flags)
查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表
re.finditer(pattern,string,flags)
与 findall()函数相同,但返回的不是一个列表,而是一个迭代器。 对于每一次匹配,迭代器都返回一个匹配对象
re.sub(pattern,repl , string, count)
使用 repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义 count, 否则就将替换所有出现的位置( 另见 subn()函数,该函数返回替换操作的数目)
re.subn(pattern,repl , string, count)
返回(re.sub(pattern,repl , string, count),替换次数)
我们来看一下re中的compile函数:该函数将正则表达式的字符串化为Pattern匹配对象。
比如:
pattern = re.compile(r'\d+')
这会生成一个仅匹配数字的pattern对象,用来给接下来的函数作为参数,进行进一步的搜索操作。
大家在上面函数中可能注意到有一个flags参数,这个参数代表匹配模式,取值时可以使用“|”来表示两个条件同时生效。