【问题标题】:Find list of words in a dataframe string column在数据框字符串列中查找单词列表
【发布时间】:2021-02-16 15:36:22
【问题描述】:

我有一个数据框列,其中包含文章名称(名称:文章)。我希望创建另一个列来扫描文章列的每个元素,并从列表中找到以下任何关键字:

['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']

问题是“?”的存在返回一个错误:在位置 32 没有可重复的内容。我尝试将 regex=False 传递给我的代码仍然看到同样的问题

mylist = ['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']
pattern = '|'.join(mylist)
df1_pcp['Boolean flag'] = df1_pcp.Title.str.contains(pattern)

我应该如何解决这个问题?

【问题讨论】:

  • '?' 是一个特殊的正则表达式字符,考虑用'\?'替换它吗?

标签: python pandas string list


【解决方案1】:

您应该转义需要在正则表达式中保留文字(非 RE)语义的字符串。您可以使用re 库中的re.escape() 自动转义字符串:

import re

mylist = ['What','Why','How', 'Who', 'COVID-19', 'COVID', 'When','Where','?']

print('|'.join(mylist))

pattern = '|'.join(re.escape(elem) for elem in mylist)
print(pattern)

观察输出:

What|Why|How|Who|COVID-19|COVID|When|Where|?
What|Why|How|Who|COVID\-19|COVID|When|Where|\?

如您所见,我们对您的文字字符串进行转义的模式,即连字符 和?字符得到了转义。 PCRE 模式不分配特殊的“元字符”含义 连字符除了在字符类中 - 至少我记不得了,但转义该字符也没有什么坏处。

将您打算传入的字符串 re.escape 通常是个好主意 一个正则表达式引擎,除非你明确地保留他们的“模式” 质量而不是它们的文字字符串特征。这尤其 如果您的搜索词来自外部来源,而这些来源现在可能已经了解正则表达式,或者更糟糕的是,确实了解并利用他们的理解来制作极其悲观的正则表达式,则为 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多