菜鸟教程 python 正则表达式,python 正则表达式语法大全

  菜鸟教程 python 正则表达式,python 正则表达式语法大全

  序

  正则表达式是从字符串中发现规则,并通过“抽象”符号表达出来。比如如何计算2,5,10,17,26,37这样的数列的第七个值,首先要找到数列的规律,然后用表达式n2 1来描述它的规律,然后得到50的第七个值。对于需要匹配的字符串,第一步是发现规则。本文主要使用正则表达式来完成字符串的查询匹配、替换匹配和切分匹配。

  常用的正则符号

  在进入字符串匹配之前,我们先了解一下常见的正则符号有哪些。

  如果读者能够熟练掌握上表中的内容,相信一定能够游刃有余的处理弦乐。如前所述,本节将基于正则表达式完成字符串的查询、替换和分段。这些操作都需要导入re模块,并使用如下所述的几个函数。

  字符串的匹配查询

  re模块中的findall函数可以遍历并匹配指定的字符串,获取字符串中所有匹配的子字符串,并返回一个列表结果。该函数的参数具有以下含义:

  findall(模式,字符串,标志=0)

  模式:指定要匹配的正则表达式。

  String:指定要处理的字符串。

  Flags:指定匹配模式。常用值可以是re。我想。m,re。s和re.x. ReI的模式是让正则表达式不区分大小写;关于。m的模式是让正则表达式匹配多行;戒指的图案。s表示常规符号。它可以匹配任何字符,包括换行符;关于。x模式允许正则表达式写得更详细,比如多行表示、忽略空格字符、添加注释等。

  字符串的匹配替换

  re模块中sub函数的作用是替换,类似于string的替换方法。该函数根据正则表达式用repl替换满足匹配的内容。该函数的参数具有以下含义:

  sub(模式,复制,字符串,计数=0,标志=0)

  模式:与findall函数中的模式相同。

  Repl:指定要替换的新值。

  String:与findall函数中的字符串相同。

  Count:用于指定最大替换次数;默认值是所有替换。

  标志:与findall函数中的标志相同。

  字符串的匹配分割

  re模块中的split函数根据指定的正则表达式对字符串进行拆分,类似于字符串的拆分方法。该功能的具体参数具有以下含义:

  split(模式,字符串,maxsplit=0,标志=0)

  模式:与findall函数中的模式相同。

  Maxsplit:用于指定分割数;默认为所有分部。

  String:与findall函数中的字符串相同。

  标志:与findall函数中的标志相同。

  实战案例

  如果已经掌握了上述函数和参数的含义,还需要通过案例进一步加强理解。接下来举例说明以上三个功能:

  #导入正则表达式的re模块

  进口

  #取出字符串string8中的所有天气状态

  8= {YMD: 2018-01-01 ,天奇3360 晴,aqiInfo: 轻度污染 },{YMD3360 2018-01-02 ,天奇3360 多云-小雨

  {YMD3360 2018-01-03 ,天齐3360 小雨转中雨,aqiInfo: 优秀 },{YMD3360 2018-01-04 ,天齐3360 中雨转小雨,AQIII

  #使用基于正则表达式的findall函数

  print(re . find all( tiancy : (。*?)“”,字符串8))

  #取出字符串9中所有带字母O的单词

  string9=我们共同发现,只有在存在激烈竞争的时候,非洲市场才会繁荣

  公平竞赛,

  Ourcelebrationofinitiativeandenterprise'

  #基于正则表达式使用findall函数

  print(re.findall('w*ow*',string9,flags=re.I))

  #将string10中的标点符号、数字和字母删除

  string10='据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空

  试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'

  #基于正则表达式使用sub函数

  print(re.sub('[,。、a-zA-Z0-9()]','',string10))

  #将string11中的每个子部分内容分割开

  string11='2室2厅101.62平低区/7层朝南

  上海未来-浦东-金杨-2005年建'

  #基于正则表达式使用split函数

  split=re.split('[-

  ]',string11)

  print(split)

  #分割结果的清洗

  split_strip=[i.strip()foriinsplit]

  print(split_strip)

  out:

  ['晴','阴~小雨','小雨~中雨','中雨~小雨']

  ['Together','discovered','only','to','competition','Our','celebration','of']

  据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊

  耳载荷试验叠装试验等验收试验

  ['2室2厅','101.62平','低区/7层','朝南','上海未来','浦东','金杨','2005年建']

  ['2室2厅','101.62平','低区/7层','朝南','上海未来','浦东','金杨','2005年建']如上结果,在第一个例子中通过正则表达式"tianqi:'(.*?)'"实现目标数据的获取,如果不使用括号的话,就会产生类似"tianqi:'晴'", "tianqi:'阴~小雨'"这样的值,所以,加上括号就是为了分组,且仅返回组中的内容;

  第二个例子并没有将正则表达式写入圆括号,如果写上圆括号也是返回一样的结果,所以findall就是用来返回满足匹配条件的列表值,如果有括号,就仅返回括号内的匹配值;

  第三个例子使用替换的方法,将所有的标点符号换为空字符,进而实现删除的效果;

  第四个例子是对字符串的分割,如果直接按照正则 '[,。、a-zA-Z0-9()]' 分割的话,返回的结果中包含空字符,如 '2室2厅' 后面就有一个空字符。为了删除列表中每个元素的首尾空字符,使用了列表表达式,并且结合字符串的strip方法完成空字符的压缩。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: