python中利用正则表达式将所有切合条件的字段全

问题如标题,利用正则表达式匹配字段今朝无非就三种,别离是:

re.match() re.search() re.findall()

简朴先容一下,re.match()与re.search()很是雷同,主要区别就是前者是从方针字符串的开头匹配,尔后者则要没有这个要求。而re.findall()则是可以返回匹配的所有功效。可是有时候re.findall()返回的功效和前面两个并纷歧样,我们来看下面一个例子:
对付句子:

起病以来,患者无腰背痛、颈痛,无咽痛、口腔溃疡,无光过敏、脱发,无口干、眼干,无肢端爆发性青紫,无肢体乏力,无浮肿、泡沫尿,精力、食欲、睡眠欠佳,近1月大便干结,5-6天1次,无腹痛、黑便、便血,小便1-2小时1次,无尿痛、血尿。体重未见明明变革。

我想利用正则去匹配所有包括小便和尿相关的子句,目标就是将“无浮肿、泡沫尿”和“小便1-2小时1次,无尿痛、血尿。”识别出来而且将这些子句返回。
原来我想利用re.findall()去匹配:

import re lines = [ "起病以来,患者无腰背痛、颈痛,无咽痛、口腔溃疡,无光过敏、脱发,无口干、眼干,无肢端爆发性青紫,无肢体乏力,无浮肿、泡沫尿,精力、食欲、睡眠欠佳,近1月大便干结,5-6天1次,无腹痛、黑便、便血,小便1-2小时1次,无尿痛、血尿。体重未见明明变革。", ] for line in lines: pattern = "[,;.,;。]+[^,;.,;。]*((小便)|尿)+[^,;.,;。]*[,;.,;。]+" str = re.findall(pattern,line) print(str)

功效为:

[('尿', ''), ('小便', '小便')]

这里说明一下我利用的模式的意义,因为我是要匹配子句,所以一个子句的前后一定会有相应的标记,所以pattern前面和后头均添加了“[,;.,;。]+”;“+”暗示至少匹配一个。尔后头的“[,;.,;。]*”暗示匹配0个或多个除标点标记“,;.,;。”的任意字符,这里别离添加了中英文的逗号、分号和句号,“*”暗示匹配0个或1个及以上。需要说明的是,这里我之所以利用“[,;.,;。]”,是因为文本中大概包括许多其他的标记,像上例中呈现的“-”;所以想要利用汉字、数字、特定标记来匹配的话大概会存在漏掉,而我的目标是只想要获得匹配的子句,所以利用“[^,;.,;。]”会更通用一些。接下来就是“((小便)|尿)”意思是匹配含有“小便”可能含有“尿”的子串。
可是利用re.findall()所获得的功效并不是我想要的,于是我稍微换了一下匹配法则,将“((小便)|尿)+”换成了“[(小便)|尿]+”;为了验证匹配的合用性,我又添加了两个样本。总体如下:

import re lines = [ "起病以来,患者无腰背痛、颈痛,无咽痛、口腔溃疡,无光过敏、脱发,无口干、眼干,无肢端爆发性青紫,无肢体乏力,无浮肿、泡沫尿,精力、食欲、睡眠欠佳,近1月大便干结,5-6天1次,无腹痛、黑便、便血,小便1-2小时1次,无尿痛、血尿。体重未见明明变革。", "起病以来,睡眠、胃纳正常,小便正常,近4~5年来天天解大便3~4次,多为黄褐色成形软便,偶有解烂便,有排便不尽感,便血、解黑便,无消瘦。", "身材矮小,体重较同龄人轻。" ] for line in lines: pattern = "[,;.,;。]+[^,;.,;。]*[(小便)尿]+[^,;.,;。]*[,;.,;。]+" str = re.findall(pattern,line) print(str)

功效为:

[',无浮肿、泡沫尿,', ',近1月大便干结,', ',无腹痛、黑便、便血,', ',无尿痛、血尿。']
[',小便正常,', ',多为黄褐色成形软便,', ',有排便不尽感,']
[]

倒是匹配出了子句,一则是“小便1-2小时1次,无尿痛、血尿”中的“小便1-2小时1次”没有匹配出来,二则是竟然连大便相关的“近1月大便干结”和“无腹痛、黑便、便血”都匹配出来了,看来“[(小便)尿]”的意思并不是匹配含有“小便”可能“尿”的子串;那“[(小便)尿]”的意思是不是匹配含有“小”、“便”、“尿”任意一个的子串呢?可是按照第三个含有“小”可是不含“便”与“尿”的样本可以看出,上述的想法依然差池。
再加上re.findall()没有匹配到的子串在原始文本中的开始和竣事位置,所以我想要获得“小便1-2小时1次,无尿痛、血尿。”这种两个子句连在一起的环境也很难获得。
于是我转而利用另一个很常用的re.search()要领。

import re lines = [ "起病以来,患者无腰背痛、颈痛,无咽痛、口腔溃疡,无光过敏、脱发,无口干、眼干,无肢端爆发性青紫,无肢体乏力,无浮肿、泡沫尿,精力、食欲、睡眠欠佳,近1月大便干结,5-6天1次,无腹痛、黑便、便血,小便1-2小时1次,无尿痛、血尿。体重未见明明变革。", ] for line in lines: pattern = "[,;.,;。]+[^,;.,;。]*((小便)|尿)+[^,;.,;。]*[,;.,;。]+" str = re.search(pattern, line) print(str.group())

功效为:

,无浮肿、泡沫尿,

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdsyj.html