为什么我的正则表达式不能使用 str.contains?



我有一个非常简单的搜索字符串。我正在寻找一家名为";Lidl";。

我的数据帧:

term_location  amount
0          Lidl    2.28
1          Lidl   16.97
2          Lidl    2.28
3          Lidl   16.97
4          Lidl   16.97
5          Lidl   16.97
6          Lidl   16.97
7          Lidl   16.97
8          Lidl   16.97
9          Lidl   16.97

在这里,我正在搜索Lidl的regex版本:

r = r'blidlb'
r = re.compile(r)

df[df.term_location.str.contains(r,re.IGNORECASE,na=False)]

这将返回一个空的数据帧。

然而,如果我只是把简单的字符串放在str.contains()中,它就可以工作了,并且我得到了返回的Lidl的数据帧:

df[df.term_location.str.contains('lidl',case=False,na=False)]

我更希望能够使用regex,因为我还有一些条件要构建到查询中。

那么发生了什么?我想不通。

pd.DataFrame.from_dict():的练习数据帧

{'term_location': {0: 'Lidl',
1: 'Lidl',
2: 'Lidl',
3: 'Lidl',
4: 'Lidl',
5: 'Lidl',
6: 'Lidl',
7: 'Lidl',
8: 'Lidl',
9: 'Lidl'},
'amount': {0: 2.28,
1: 16.97,
2: 2.28,
3: 16.97,
4: 16.97,
5: 16.97,
6: 16.97,
7: 16.97,
8: 16.97,
9: 16.97}}

您的正则表达式不起作用,因为您正试图匹配单词"lidl";完全一样(小写(。

您应该将单词的第一个字符更改为大写:

re.compile(r"bLidlb")

或者使用re.IGNORECASE标志来匹配单词(无论大小写(:

re.compile(r"blidlb", re.IGNORECASE)

请记住,b试图匹配文本开头的单词。例如_Lidl";与上面的任何正则表达式都不匹配。

使用字符串文字作为模式参数,它将被解析为正则表达式:

df[df.term_location.str.contains(r'blidlb',case=False,na=False)]
^^^^^^^^^ 

case=False的作用与re.IGNORECASE相同。

或者,使用(?i):

df[df.term_location.str.contains(r'(?i)blidlb',na=False)]

最新更新