当前位置:

python通过正则匹配开头和结尾提取间字符串内容

访客 2024-01-05 392 0


一、提取包含始末字符
1、起始字符串固定

a=re.findall('起始字符串.*结束字符串',str)



2、起始字符串不固定(即从首字符串提取到固定的字符串结束),用^指定从首字符串开始

a=re.findall('^.*结束字符串',str)



二、不包含始末字符串

  • #方法1
  • a=re.findall('(?<=始字符串).*?(?=末字符串)',str)
  • #方法2
  • a=re.findall('始字符串(.*?)末字符串',str)


  • 在re.findall()的方法中'始字符串.末字符串’可以匹配到相同的值直到最后一个值;如果参数为'始字符串.?末字符串’则只匹配到第一个值。
    其实使用.*和.都能提取特定始末字符串中间的内容,下面顺便说下两者的区别。
    三、.*和.正则提取的区别
    .:匹配任意字符
    *:匹配0个或多个字符
    ?:非贪婪模式,在符合的条件下,尽可能少的匹配(尽可能短的匹配)

  • str2="aabab"
  • a=re.findall('a.*?b',str2)#结果:['aab','ab']
  • b=re.findall('a.?b',str2)#结果:['aab']


  • .?:匹配aab和ab,因为可以匹配0个字符,所以可以匹配得到ab
    .?:匹配aab,因为必须a和b中间至少有一个字符,所以排除了ab

    四、起始有无^的区别

  • str2="aabab"
  • c=re.findall('.*',str2)#结果:['aabab','']
  • d=re.findall('^.*',str2)#结果:['aabab']


  • 五、pandas对具体列的内容通过正则表达式进行数据提取
    使用前要确保该列的类型统一,str或者float格式,最好事先通过astype强制转换一下

    df[‘新列名’]=df[‘提取的列名’].str.extract(‘正则表达式’,expand=True)


    参考文章:

    https://www.cnblogs.com/ZhangHT97/p/13427325.html
    https://www.cnblogs.com/YouJeffrey/p/15209895.html
    https://blog.csdn.net/dudu3332/article/details/111555572

    发表评论

    • 评论列表
    还没有人评论,快来抢沙发吧~