在Python中使用正则表达式中的lookbehind和负向lookbehind断言打结

在Python中使用正则表达式中的lookbehind和负向lookbehind断言打结,第1张

概述我有一个Pandas数据框,它有一列字符串数据,由两个不同的部分组成,用正斜杠分隔.我想从字符串的“右侧”提取文本模式,但是如果存在特定的字符串模式则不能.以下简单的例子说明了这个问题. import numpy as npimport pandas as pdimport remyDF = pd.DataFrame({'pet':['rabbit','mammal/rabbit','ma 我有一个Pandas数据框,它有一列字符串数据,由两个不同的部分组成,用正斜杠分隔.我想从字符串的“右侧”提取文本模式,但是如果存在特定的字符串模式则不能.以下简单的例子说明了这个问题.

import numpy as npimport pandas as pdimport remyDF = pd.DataFrame({'pet':['rabbit','mammal/rabbit','mammal/small fluffy rabbit','mammal/lop-eared rabbit','mammal/many rabbits','mammal/jack rabbit']})

所以,数据框看起来像:

pet0                      rabbit1               mammal/rabbit2  mammal/small fluffy rabbit3     mammal/lop-eared rabbit4         mammal/many rabbits5          mammal/jack rabbit

我希望能够提取与兔子相关的术语,但前提是它们出现在/分隔符的右侧,而不是兔子前面有杰克(有或没有中间空间).

我想出的正则表达式是:

rxStr = '(?P<bunny>(?<=/)(?<!jack)(?:.*rabbits?))'

…我希望在任何比赛之前都有/但如果先前是杰克则不需要.但是,它没有像我希望的那样起作用.我尝试过很多变化而没有任何运气.

rxStr = '(?P<bunny>(?<=/)(?<!jack)(?:.*rabbits?))'rx = re.compile(rxStr,flags=re.I|re.X)rabbitDF = myDF['pet'].str.extract(rx,expand=True)myDF = myDF.join(rabbitDF)print(myDF)                          pet                bunny0                      rabbit                  NaN1               mammal/rabbit               rabbit2  mammal/small fluffy rabbit  small fluffy rabbit3     mammal/lop-eared rabbit     lop-eared rabbit4         mammal/many rabbits         many rabbits5          mammal/jack rabbit          jack rabbit

在第0行中,正则表达式正确无法找到匹配项,因为没有/字符.然而,在第5行杰克兔匹配尽管杰克在兔子之前.

我怎样才能编写一个能够识别兔子术语的正则表达式,但前面只有/前面没有杰克?任何解释为什么上面给出的正则表达式失败也将非常感激.

解决方法 使用前瞻而不是lookbehind:

myDF.pet.str.extract('(?P<bunny>(?<=/)(?!jack).*rabbit)',expand=True)                 bunny0                  NaN1               rabbit2  small fluffy rabbit3     lop-eared rabbit4          many rabbit5                  NaN
(               # capture group    (?<=/)      # lookbehind - forwardslash    (?!jack)    # negative lookahead - "jack"     .*          # match anything    rabbit      # match "rabbit")

在这里,负向前瞻意味着fwslash不得跟随“jack”.

总结

以上是内存溢出为你收集整理的在Python中使用正则表达式中的lookbehind和负向lookbehind断言打结全部内容,希望文章能够帮你解决在Python中使用正则表达式中的lookbehind和负向lookbehind断言打结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1191990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存