正则表达式,听起来挺高大上,几乎所有的语言都有这个内容,python中是用re模块,接下来先介绍下什么是正则表达式,比如你要从一大串字符串中提取出你要的信息,www.baidu.com www.youtube.com,你要从中提取出baidu,youtube等字符串,怎么办呢,首先来分析它的结构,不难看出,这些字符串前面是www,后面是.com,中间就是我们要的部分,因此我们可以写一个这样的表达式

p=r'www\.(.+?)\.com'  其中的\.是为了转义.,.在正则表达式中是通配符,可以匹配任何字符,这个表达式就可以匹配如www.baidu.com,www.sina.com这样的字符串了,那中间的(.+?)是什么意思呢,()代表的是第几个子模式,比如(0(1)(2)),其中的数字就代表第几个子模式,其实非常容易理解,就看左边有多少个(就可以,如果没有(,就默认为1,用一个()把所有的字符串包裹住,那现在我们的子模式1中就是baidu,sina等内容了,那这个?是什么意思呢,代表非贪婪模式,就是尽可能少匹配,一遇到后面是.com就停止匹配。说了这么多,上代码。

import  re #导入re模块
s=r'www.baidu.com www.youtube.com'
pat=r'www\.(.+?)\.com'
p=re.compile(pat) #预编译正则表达式,下次使用可以缩短时间
m=re.match(pat,s) #匹配s的开头的字符串,返回matchobject对象,如果是search()就是匹配所有的字符串
print(m.group(1)) #打印第一个子模式的内容,指定了1,不指定就默认为0
print(m.groups()) #打印所有子模式的内容,返回一个元组,
print(re.findall(pat,s)) #打印出所有正则表达式匹配了字符串的内容,上面的是只匹配第一个,这个是匹配所有的

结果如下:

baidu
('baidu',)
['baidu', 'youtube']

正则表达式的匹配规则:. 匹配所有内容,若想匹配它本身(一个点符号),r'\.' 转移即可,[ a-z]字符集,匹配a-z的任意字母,其实就是任意一个小写字母,大写就是[A-Z],[^a-z ] 匹配非小写字母,^就是非,r'^ a  b$’,^开头为a,$结尾为b,\w匹配字母和数字,\d匹配数字,\r匹配空格,\t匹配tab

还有很多匹配规则,这里只列出常用的,具体可以查看官方文档多练习