python - 为什么我的正则表达式不能与 str.contains 一起使用?

标签 python regex pandas

我有一个非常简单的搜索字符串。我正在寻找一家名为“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 的正则表达式版本:

r = r'\blidl\b'

r = re.compile(r)


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

这会返回一个空数据框。

但是,如果我只是将简单的字符串放入 str.contains() 中,它就会起作用,并且我会得到返回的 Lidls 的数据帧:

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

我更希望能够使用正则表达式,因为我还有一些条件可以构建到查询中。

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

练习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"\bLidl\b")

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

re.compile(r"\blidl\b", re.IGNORECASE)

请记住,\b 尝试匹配文本开头的单词。例如,“_Lidl”不会匹配上面的任何正则表达式。

关于python - 为什么我的正则表达式不能与 str.contains 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62956575/

相关文章:

python - 根据 pandas 中的条件删除 DataFrame 行的最有效方法是什么?

c# - 使用正则表达式在 Visual Studio 搜索框中搜索电子邮件地址

javascript - 用于匹配输入的正则表达式,例如 HTML 输入中模式的 "abc > 10, cba < 100, ..."

Python并发.futures : threads don't start

python - 使用 Python 中的日志记录库访问所有已定义的记录器

regex - 删除字符串中第一个逗号之前的句点

Python 数据帧向量化 for 循环

python - 检索包含 NaN 值的行的索引

python - python 参数解包的操作顺序在哪里?

python - 我需要两个连续的小写字母来满足密码要求