正则表达式(regular express):表示一段有规律的信息。
使用正则表达式有如下步骤。
(1)寻找规律。
(2)使用正则符号表示规律。
(3)提取信息。
1.1 正则表达式的基本符号
1.2在python中使用正则表达式
(1)findall的函数原型为:
re.findall(pattern, string , flags=0)
pattern表示正则表达式,string表示原来的字符串,flags表示一些特殊功能的标志(可忽略不写)。
findall的结果是一个列表,包含了所有的匹配到的结果。
如果没有匹配到的结果,返回空列表。如下例所示:
flags参数
函数原型中有一个flags参数,可以忽略不写的。
不省略时,具有一些辅助功能:忽略大小写、忽略换行符等。
flag.
要匹配的内容存在换行符,要忽略换行符就需要使用到“re.S”这个。
使用re.S作为flag来忽略换行符
(2)search :
search()的用法和findall()的用法一样,但是search()只会返回第一个满足要求的的字符串。一旦找到符合要求的内容,就会停止查找。
如果匹配成功,则是一个正则表达式的对象,如果没有匹配到任何数据,就是none。
(3)"." 和".?"区别:
“.":贪婪模式,获取最长的满足条件的字符串。
".?”:非贪婪模式,获取最短的满足条件的字符串。
1.2正则表达式的提取技巧
(1)先抓大再抓小
一些无效内容和有效内容可能具有相同的规则。而我们想要的是有效内容,怎么实现呢?
有效书本:
正在读:Python
正在读:C++
正在读:C#
无效书本:
以前读:Ruby
以前读:JAVA
怎么实现 想要获得有效书本的名单
(2)括号内和括号外
*括号外面前后有其它字符,表示提取信息的开端和结尾,不包括在提取信息里。*括号里面前后有其它普通字符,表示提取信息的开端和结尾,包括在提取信息里
下例如下:
1.3 re.match与re.search与re.findall的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
1.4.1 使用re替换string中每一个匹配的子串后返回替换后的字符串。
格式:
re.sub(pattern, repl, string, count)
1.4.2 re.sub还允许使用函数对匹配项的替换进行复杂的处理。
如:re.sub(r’\s’, lambda m: ‘[’ + m.group(0) + ‘]’, text, 0);将字符串中的空格’ ‘替换为’[ ]’。