① python的正则表达式
1,正则表达式的一些内容
正则表达式主要是用来匹配文本中需要查找的内容,例如在一片文章中找出电话号码,就中国的来说11位纯数字(不说座机),则使用"d{11}" 意味匹配数字11次,就能准确的查找出文本中的电话号码. 还有就是在编写网络爬虫的时候需要提取很多超链接再次进行爬取,使用正则表达式就很方便.直接匹配http开头就行,当然也可以使用beautifulsoup的select方法.
看下面的程序看看正则表达提取文本中的邮箱:
w 匹配字母,数字,下划线
+ 匹配1次或者多次
re是正则表达式的工具包,工具包出错的话在anaconda的命令行输入"pip install re"安装,其他的工具包也是如此.
re.compile()中的r示意不是转义字符,也就是保持后面字符串原样,findall返回一个列表.下面还有一个版本的程序略有不同.
compile的另一个参数re.IGONORECASE(忽略大小写),还可以是re.DORALL,多行模式,具体功能也是模糊不清,不过在使用通配符 . 匹配的时候加上re.DOTALL参数能够匹配换行.如果希望忽略大小写和多行模式都开启可以使用re.compile(r'....',re.IGNORECASE|re.DOTALL) .
表达式使用( ),对匹配到的内容分为3组 也就是(w+)出现字母,数字,下划线一次或多次,这个分组就是下面使用match对象的grou()方法的时候的参数.不给参数和参数0都是得到整个匹配到的内容, 参数1得到第一个括号匹配到的内容,以此类推参数2和3,如果没有括号分组的话使用参数会出现错误.
search( )查找和正则式匹配的内容,只匹一次后面的那个找不到.返回一个match对象
w 匹配字母,数字,下划线
W 匹配字母,数字.下划线之外的所有字符
d 匹配数字
D 匹配非数字
s 匹配空格,制表符,换行符
S匹配除空格制表符,换行符之外的其他字符
[ .... ]定义自己的匹配,如[aeiouAEIOU ]匹配所有的元音字母,注意不是匹配单词.
{最少次数,最多次数},例如{3,9} 匹配3-9次,{ ,10}匹配0-10次. 默认为匹配最多次数(贪心匹配),非贪心模式在后面加上问号
? 可选 0次或者1次吧
+匹配1次或多次
*匹配0次或者多次
^ 判断开头 ^d 如果待匹配串是数字开头则返回第一个数字
$判断结尾 d$ 如果待匹配串是数字结尾则返回最后一个数字
. 通配符,匹配除换行之外的所有字符
d{11} 匹配数字11次
. * 匹配所有字符除 换行
[a-zA-Z0-9._%+-] 小写和大写字母、数字、句点、下划线、百分号、加号或短横
[a-zA-Z]{2,4} 匹配字母 2 - 4次
② 如何用正则表达式添加括号
需要在查找时捕获数字1,在[0-9]外加小括号,就行了。
下面是python语言的例子(见图).
③ python 正则匹配 获取括号内字符
* 提取字典中的【】内的字符,生成可以导入到五笔词库中的txt文件。
生成后的结果:
因为正则表达式语法很难读,因此本次程序以多次的方式来讲解。
括号中的 . 表示一个字符的通配符,可以用来表示任意字符。
+表示字符数量,数量为一个以上
【.+】表示匹配所有括号内的字符,括号内字符至少有一个或以上。 比如【啊】或者【阿公】就会被匹配进去,而【】就不会被匹配进去
只要用()把你想要的部分框起来就可以。比如 【(匹配的字符)】 ,最后出现的就是 匹配的字符
【.+】 =》 【(.+)】
效果:
最后结果如上,红框里面有哪里不对?查看原文:
原来【阿兰若】的前括号 和 【兰若】 的 后括号 匹配了。这是因为这里使用的是贪婪模式,换句话说,
【1】【2】 匹配出来的不会是 1 2 两个字符,而是: 1】【2
我们要把它改成懒惰模式:
【(.+)】=》【(.+?)】
那个问号表示的就是懒惰模式
④ Python中正则表达式的匹配规则总结
其他关于Python的总结文章请访问: https://www.jianshu.com/nb/47435944
正则表达式用来匹配字符串,在python中可以使用 re 模块来完成,本篇做一个对正则表达式的匹配规则的总结
在上述的精确匹配后可以跟上一些符号来进行模糊的匹配:
可以使用中括号的形式进行范围匹配,中括号表达式后边可以跟上上述模糊匹配的符号来表示数量
多个条件可以 紧跟着写在同一个中括号中 ,比如:
[a-zA-Z] :匹配一个大、小写字母
⑤ Python正则表达式之re.match()
我们在面对生物数据,比如序列信息(比如碱基序列、氨基酸序列等)的时候, 会时常要问,这其中是否包含着且含有多少某种已知的模式,一段DNA中是否包含转录起始特征TATA box、一段RNA中是否包含某种lncRNA、一段肽链中是否包含锌指结构等等;另一方面,我们在操作数据时,会时常遇到诸如把某个字符(对象)换成另一种字符(对象)的替换操作,而其本质还是如何搜索符合某种(替换)模式的对象。
在这些几乎天天都可以碰到的 模式匹配/搜索问题中,正则表达式就是一把解决问题的利剑!
在Python的re模块中,常用的有四个方法(match、search、findall、finditer)都可以用于匹配字符串,今天我们先来了解一下re.match()。
re.match()必须从字符串开头匹配! match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。主要参数如下:
举个栗子来理解一下它的用法:
运行结果:
从例子中我们可以看出,re.match()方法返回一个匹配的对象,而不是匹配的内容。通过调用span()可以获得匹配结果的位置。而如果从起始位置开始没有匹配成功,即便其他部分包含需要匹配的内容,re.match()也会返回None。
一般一个小括号括起来就是一个捕获组。我们可以使用group()来提取每组匹配到的字符串。
group()会返回一个包含所有小组字符串的元组,从 0 到 所含的小组号。
直接调用groups()则直接返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
再举一个栗子:
运行结果:
⑥ Python中的正则表达式
因为正则表达式中有两组小括号,即两个分组
findall会以元组乱销形式返回所有分组中的内容,即[('127.0.0.1', '.1')]
其中'127.0.01'表示匹配最外层大括号的内容
'.1'表示匹配'.[0-9]{1,3}'的内容(最后一次重复时为.1)
由于('.[0-9]{1,3}')为需要重复三次的分组,该括号不能省略
而使用findall就一定会显示括号分组的内容
若想只显示127.0.0.1而不哗梁游显示'.1',可考虑使用match方法
返回从字符串起始位置开始,第一次匹配正则表达式的内容
match返回的结果为re.Match对象,可通过group()显示匹配的字符串,渣袭即127.0.0.1
通过groups()显示匹配的所有分组,即('127.0.0.1', '.1')
如图所示: