python正则表达式的使用方法

正则表达式又称规则表达式(Regular Expression),通常被用来检索、替换那些符合某个模式(规则)的文本,目前很多编程语言都支持正则表达式,正则表达式的缩写为regex

正则表达式的优点有:

  • 灵活性、逻辑性和功能性非常强
  • 可以迅速地用极简单的方式达到字符串的复杂控制

对于刚接触的人来说正则表达式比较晦涩难懂,不是打击你们啊,我刚开始接触的时候也是一脸懵逼,懵懵懂懂的,学了一段时间才理解了一点,不过学会正则表达式之后可以干很多有趣的事情,下面举一些例子来让大家理解一下

python使用正则表达式需要导入re包,因为re包是python自带的,所以无需下载就可以使用

import re 导入re包

下面这些是正则表达式的常用方法

代码 说明
. 匹配除换行符以外的任意字符
\d 用于匹配数字
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\b 匹配单词的开始或结束
^ 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思
$ 匹配字符串的结束

完整案例代码

import re

string = '38x1%x2__.嗯139哈123哈$x嘻@xx' #定义一组字符串

pattern = re.compile("\d") #\d匹配数字
print(pattern.findall(string))
pattern1 = re.compile("x\d") #\d匹配数字,这里是匹配x和x后面的数字
print(pattern1.findall(string))
输出结果为:

['3', '8', '1', '2', '1', '3', '9', '1', '2', '3'], ['x1', 'x2']
这个还比较好理解吧,\d就是把所有的数字都匹配打印出来,x\d就是把x和x后面的一个数字一起打印出来

匹配字符

pattern1 = re.compile("\w") #\w匹配数字、字母、下划线、汉字
print(pattern1.findall(string))
输出结果为:

['3', '8', 'x', '1', 'x', '2', '_', '_', '嗯', '1', '3', '9', '哈', '1', '2', '3', '哈', 'x', '嘻', 'x', 'x']

匹配数字

number = '123456789'

pattern2 = re.compile("\d\d\d") #匹配三个连接的数字
print(pattern2.findall(number))

输出结果为:
['123', '456', '789']

那么问题来了,我匹配这些有什么用呢?咦,好像是没什么用啊,别急,那是因为学的还不够多,下面接着来学,比如说给定一组数字,这些数字其实是很多个人的电话号码连起来了,没有用空格符隔开,那一个个算是不是很费劲啊,这时候正则表达式就派上用场了

给定一组数字number = 1008610086113800138000,这里是两个号码连起来了

匹配号码

import re

number  = 1008610086113800138000

#这里有人就会想,是不是像上面那样\d\d\d\d\d一直打11个\d呢?其实不用那么麻烦
pattern2 = re.compile("\d{11}") #直接在\d后面给他一个大括号,大括号括住什么数字就匹配几个数字
print(pattern2.findall(number))

输出结果为:
['10086100861', '13800138000']
这样就把两个号码匹配就来了,就不用一个一个算了,是不是简单又方便呢?

又比如说我们爬虫的时候会爬出很多没用的信息,我们只要获取它有用的链接又该怎么做呢?原理也是一样的

匹配网页链接
href = '''<a href="http://news.4399.com/hxjy/"><img alt="4399火线精英" src="http://imga5.5054399.com/upload_pic/2017/9/20/4399_15094597623.jpg">4399火线精英</a>'''

pattern = re.compile('''[(href)(src)]=["'](.*?)['"]''')#匹配href和src的链接地址
print(pattern.findall(href))

输出结果为:
['http://news.4399.com/hxjy/', 'http://imga5.5054399.com/upload_pic/2017/9/20/4399_15094597623.jpg']
是不是快速便捷呢?

正在尝试写博客,把会的分享给你们,如有写的不好的地方,希望指点一下,谢谢!

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/86603321