我有一个Pandas dataframe,它有一列字符串数据,由两个由正斜杠分隔的不同部分组成。我想从字符串的“右手边”提取文本模式,但如果存在特定的字符串模式,则不需要。下面的小例子说明了这个问题。在
import numpy as np
import pandas as pd
import re
myDF = pd.DataFrame({'pet':['rabbit','mammal/rabbit','mammal/small fluffy rabbit','mammal/lop-eared rabbit','mammal/many rabbits','mammal/jack rabbit']})
所以,数据帧看起来像:
^{pr2}$我希望能够提取与rabbit相关的术语,但前提是它们出现在/
分隔符的右侧,而不是{
我想出的正则表达式是:
rxStr = '(?P<bunny>(?<=/)(?<!jack)(?:.*rabbits?))'
…我希望任何匹配都必须以/
开头,但是如果前面有jack
,就不需要了。然而,它并不像我希望的那样有效。我试过很多变奏曲,但运气不好。在
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 bunny
0 rabbit NaN
1 mammal/rabbit rabbit
2 mammal/small fluffy rabbit small fluffy rabbit
3 mammal/lop-eared rabbit lop-eared rabbit
4 mammal/many rabbits many rabbits
5 mammal/jack rabbit jack rabbit
在第0行中,正则表达式正确地找不到匹配项,因为没有/
字符。然而,在第5行jack rabbit
匹配,尽管jack
在rabbit
前面。在
我如何编写一个正则表达式来标识rabbit
项,但前提是必须以/
开头,而不是以{
RegEx explained ...
使用先行而不是后视:
^{pr2}$这里,否定的lookahead意味着正斜杠后面不能跟“jack”。在
相关问题 更多 >
编程相关推荐