三十一、深入Python中的正则表达式
「@Author: Runsen」
正则表达式应用的场景也非常多 。 常见的比如:搜索引擎的搜索、爬虫结果的匹配、文本数据的提取等等都会用到 , 所以掌握甚至精通正则表达式是一个硬性技能 , 非常必要 。
正则表达式正则表达式是一个特殊的字符序列 , 由普通字符和元字符组成 。 元字符能帮助你方便的检查一个字符串是否与某种模式匹配 。
Python中则提供了强大的正则表达式处理模块 , 即 re 模块 ,为Python的内置模块 。
下面 , 我带大家来一个入门demo例子 , 代码如下:
import rereg_string = "hello9527python@wangcai.@!:xiaoqiang"reg = "hello"result = re.findall(reg,reg_string)print(result)
这里reg_string就是我们的普通字符 , reg就是我们的元字符 。
我们使用 re 模块中的findall函数 , 进行匹配 , 返回的结果是列表数据类型 。
文章插图
我们使用正则表达式 , 就是为了在很长的字符串中 , 找到我们需要的字符串片段 。
元字符Python中常见元字符及其含义如下:
元字符 含义 . 匹配除换行符以外的任意字符 \w 匹配数字字母下划线汉字 \s 匹配任意空白符 \d 匹配所有的数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的开始结束
下面 , 我们具体使用下Python中的常见的元字符 。
我们还是使用上次的例子 , 这次我们需要在reg_string匹配出我们的数字 , 只需要将reg换成\d , 代码如下图所示 。
文章插图
比如 , 我们在之前的reg的hello前面加上一个^ , 意味着我们 匹配字符串的开始的hello , 那么结果就是一个 , 就是我们开头的hello 。
如果 , 我们把reg换成\w , 代码如下图所示 。
文章插图
这样就是匹配数字字母下划线 , 包括我们的汉字 。
反义代码Python中常见反义代码 及其含义如下:
反义代码 含义 \W 匹配任意不是数字字母下划线汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配非数字 \B 匹配不是单词的开始或结束 [^a] 匹配除了a以外的任意字符 [^abcd] 匹配除了abcd以外的任意字符
其实 , 记忆很简单 , 我们是不是知道\d匹配数字 , 那么\d的大写\D就是匹配非数字 , 元字符[a]匹配a任意字符 , 那么[^a]就是匹配除了a以外的任意字符 。
下面是具体例子
>>> import re>>> reg_string = "hello9527python@wangcai.@!:xiaoqiang">>> reg = "\D">>> re.findall(reg,reg_string)['h', 'e', 'l', 'l', 'o', 'p', 'y', 't', 'h', 'o', 'n', '@', 'w', 'a', 'n', 'g', 'c', 'a', 'i', '.', '@', '!', ':', 'x', 'i', 'a', 'o', 'q', 'i', 'a', 'n', 'g']>>> reg = "[^a-p]"['9', '5', '2', '7', 'y', 't', '@', 'w', '.', '@', '!', ':', 'x', 'q']
限定符什么是限定符?就是限定我们匹配的个数的东西 。
Python中常见限定符 及其含义如下:
限定符 含义 * 重复零次或多次 + 重复一次或多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复n次到m次 {1 , 3}
我们还是用我们之前的reg_string , 这次我们限定了元字符为\d{4} , 也就是我们的匹配的数字必须是4个 。
文章插图
下面 , 我们来提高难度 , 匹配字母和数字 , 限定个数为4个 。
这样我们可以使用[0-9a-z]{4} , 作为我们的元字符 , [0-9a-z]代表了0到9的十个数字和a到z的小写26个英文字母 。 [0-9a-z]{4}限定了个数为4个 。
我们打印输出下 。
文章插图
如果遇到了不是在[0-9a-z]范围内 , 就会跳过 , 直到后面的4个都是在[0-9a-z]范围内就打印输出 。
匹配ip地址在互联网中 , 一台主机只有一个IP地址 。 IP地址用于在TCP/IP通信协议中标记每台计算机的地址 , 通常用于十进制来表示 , 如192.168.1.100 。
在window系统中 , 我们可以通过ipconfig查看我们的ip 。 在linux系统中 , 我们可以通过ifconfig查看我们的ip 。
我们的ip字符串是这样子的:ip = "this is ip:192.168.1.123 :172.138.2.15"
下面要求使用正则表达式 , 将ip匹配出来 。
其实 , 我们主要编写元字符 。 比如:reg = "\d{3}.\d+.\d+.\d+" , 因为第一个数字必须是三位数开头 , 我们可以设定\d{3}固定起来 。
文章插图
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 占营收|华为值多少钱
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 操盘|中兴统一操盘中兴、努比亚、红魔三大品牌
- 印度|拒绝华为后,印度、英国斥资数十亿求助日本
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 一图看懂!数字日照、新型智慧城市这样建(上篇)|政策解读 | 新型