今天要说的是正则表达式!!!
正则表达式,顾名思义是对表达式的一种筛选,处理,判断。当然我也只是一知半解,偶尔在爬虫里会用一些,但都是很简单的表达式,所以今天浅谈一下python中re模块
先说理论的,re库里包含了正则表达式的处理函数
- re.match(pattem,string,flags)
re.match是从字符串的开始去匹配一个正则表达式模式,函数有三个参数,第一个是要匹配的正则表达式
第二个是要匹配的字符串文本
第三个是控制正则表达式的匹配方式
-
re.search(pattem,string,flags)
re.search会在字符串中查找到第一个匹配模式然后返回参数与re.match相同
-
re.sub(pattern,repl,string,count)
re.sub用于替换字符串中的匹配项,pattern是要匹配的正则表达式,
repl是要替换的字符串,string表示字符串文本count表示要替换的个数,可不写,默认全部替换re.split(pattern,string)
-
re.findall(pattern,string)(我最常用)
按照匹配模式分割字符串为一个列表获取所有匹配的字符串
-
re.compile()
可以把正则表达式编译成一个正则表达式对象
1 2 3 4 5 6 |
import re text = "JGood is a handsome boy, he is cool, clever, and so on..." regex = re.compile(r'\woo\w') print regex.findall(text) #查找所有包含'oo'的单词 print regex.sub(lambda m: '[' + m.group(0) + ']', text) #将字符串中含有'oo'的单词用[]括起来。 |
下面说一说正则表达式中几个常用符号
1. 使用‘ . ’符号
1 2 3 4 5 6 7 |
使用几个‘ . ’则往后匹配几个字符 import re code = 'abcahf123afr' b = re.findall('a..',code) print b >>>['abc', 'ahf', 'afr'] |
2. 使用‘ .* ’ 和 ‘ .*? ’贪婪模式与非贪婪模式
1 2 3 4 5 6 7 8 9 |
import re code = 'abcahf123afr' b = re.findall('a.*a',code) print b >>>['abcahf123a'] #贪婪模式匹配开始和结束字符中间内容时,内容越多越好,直到匹配到最后一个相同的字符。 b = re.findall('a.*?a',code) print b >>>['abca'] #非贪婪模式匹配开始和结束字符中间内容时,内容越少越好,一旦匹配到相同的字符就会结束。 |
3. 括号的使用可以提取想要的内容
1 2 3 4 5 6 7 8 9 |
import re code = 'abcahf123afr' b = re.findall('a(.*a)',code) print b b = re.findall('a(.*?)a',code) print b >>>['bcahf123a'] >>>['bc'] |