python中使用正则表达式将所有符合条件的字段全部提取出来
副问题[/!--empirenews.page--]
短视频,自媒体,达人种草一站处事 这篇文章首要先容了python中行使正则表达式将全部切合前提的字段所有提取出来,本文给各人先容的很是具体,对各人的进修或事变具有必然的参考小心代价,必要的伴侣可以参考下 题目如问题,行使正则表达式匹配字段今朝无非就三种,别离是: re.match() 简朴先容一下,re.match()与re.search()很是相同,首要区别就是前者是从方针字符串的开头匹配,尔后者则要没有这个要求。而re.findall()则是可以返回匹配的全部功效。可是偶然辰re.findall()返回的功效和前面两个并纷歧样,我们来看下面一个例子: 对付句子: 起病以来,患者无腰背痛、颈痛,无咽痛、口腔溃疡,无光过敏、脱发,无口干、眼干,无肢端爆发性青紫,无肢体乏力,无浮肿、泡沫尿,精力、食欲、就寝欠佳,近1月大便干结,5-6天1次,无腹痛、黑便、便血,小便1-2小时1次,无尿痛、血尿。体重未见明明变革。 我想行使正则去匹配全部包括小便和尿相干的子句,目标就是将“无浮肿、泡沫尿”和“小便1-2小时1次,无尿痛、血尿。”辨认出来而且将这些子句返回。 原来我想行使re.findall()去匹配: import re 功效为: [('尿', ''), ('小便', '小便')] 这里声名一下我行使的模式的意义,由于我是要匹配子句,以是一个子句的前后肯定会有响应的标记,以是pattern前面和后头均添加了“[,;.,;。]+”;“+”暗示至少匹配一个。尔后头的“[,;.,;。]*”暗示匹配0个或多个除标点标记“,;.,;。”的恣意字符,这里别离添加了中英文的逗号、分号和句号,“*”暗示匹配0个或1个及以上。必要声名的是,这里我之以是行使“[,;.,;。]”,是由于文本中也许包括许多其他的标记,像上例中呈现的“-”;以是想要行使汉字、数字、特定标记来匹配的话也许会存在漏掉,而我的目标是只想要获得匹配的子句,以是行使“[^,;.,;。]”会更通用一些。接下来就是“((小便)|尿)”意思是匹配含有“小便”可能含有“尿”的子串。 可是行使re.findall()所获得的功效并不是我想要的,于是我轻微换了一下匹配法则,将“((小便)|尿)+”换成了“[(小便)|尿]+”;为了验证匹配的合用性,我又添加了两个样本。总体如下: import re 功效为: [',无浮肿、泡沫尿,', ',近1月大便干结,', ',无腹痛、黑便、便血,', ',无尿痛、血尿。'] [',小便正常,', ',多为黄褐色成形软便,', ',有排便不尽感,'] [] 倒是匹配出了子句,一则是“小便1-2小时1次,无尿痛、血尿”中的“小便1-2小时1次”没有匹配出来,二则是竟然连大便相干的“近1月大便干结”和“无腹痛、黑便、便血”都匹配出来了,看来“[(小便)尿]”的意思并不是匹配含有“小便”可能“尿”的子串;那“[(小便)尿]”的意思是不是匹配含有“小”、“便”、“尿”恣意一个的子串呢?可是按照第三个含有“小”可是不含“便”与“尿”的样本可以看出,上述的设法依然差池。 再加上re.findall()没有匹配到的子串在原始文本中的开始和竣事位置,以是我想要获得“小便1-2小时1次,无尿痛、血尿。”这种两个子句连在一路的环境也很难获得。 于是我转而行使另一个很常用的re.search()要领。 import re 功效为: ,无浮肿、泡沫尿, 可见,re.search()只匹配碰着的第一个满意前提的子串。 而假如将pattern中的“((小便)|尿)”修改为“[(小便)|尿]”(可能“[(小便)尿]”,意思是完全一样的,也试过) 获得的功效为: ,无浮肿、泡沫尿, 可见修改前后并没有任何变革,可是假如我将原始文本中的“无浮肿、泡沫尿”中的“尿”删除,则修改前的功效为: ,小便1-2小时1次, 修改后的功效为: ,近1月大便干结, 也就是说对付 pattern = "[,;.,;。]+[^,;.,;。]*[(小便)尿]+[^,;.,;。]*[,;.,;。]+" 无论是re.findall()照旧re.search(),都能匹配到大便相干的子串; 而对付: pattern = "[,;.,;。]+[^,;.,;。]*((小便)|尿)+[^,;.,;。]*[,;.,;。]+" (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |