如果字符串包含列表中的单词,则从字符串中提取单词

Posted

技术标签:

【中文标题】如果字符串包含列表中的单词,则从字符串中提取单词【英文标题】:Extract a word from the string if the string contains a word from the list 【发布时间】:2021-05-19 14:48:32 【问题描述】:

如果字符串包含列表中的单词,我正在尝试从字符串中提取单词。

比如有字符串“RR_SM_Brand_A_Additive_Clean_jun2020”, 并且列表是 Brand_A、Brand_B、Brand_C 等。

我使用以下正则表达式:

/^([\s\S]*?)(Brand_A|Brand_B|Brand_C)([\s\S]*?)$.*/m

演示:Regex demo

它找到了 Brand_A,但它也有一些其他组。当我在 Google BigQuery 中运行相应的查询时,我收到一个错误:此查询没有返回任何结果。

SELECT distinct utm_campaign,  
REGEXP_EXTRACT(utm_campaign, r'/^([\s\S]*?)(Lysol|Airwick|Finish)([\s\S]*?)$.*/m')
FROM `project.dataset.table`
WHERE utm_campaign = "RR_SM_Brand_A_Additive_Clean_jun2020"

【问题讨论】:

【参考方案1】:

将第一个和最后一个括号替换为(?: ) 集合而不是( )

/^(?:[\s\S]*?)(Brand_A|Brand_B|Brand_C)(?:[\s\S]*?)$.*/m

这将阻止括号实际返回捕获的组,使它们仅分组,而不是捕获。

【讨论】:

以上是关于如果字符串包含列表中的单词,则从字符串中提取单词的主要内容,如果未能解决你的问题,请参考以下文章

在另一个表中搜索整个单词的表,如果找到则从结果中排除

如果它包含列表中的单词,则替换 Pandas 系列中部分字符串的最快方法

从excel中的字符串中删除单词的最简单方法是啥?

如何从重复的字符串中提取单词

Python过滤器功能-如果列表中的单词以特定字符开头[重复]

从python中的字符串中提取英文单词