【发布时间】:2022-01-02 01:24:39
【问题描述】:
我有一个单词列表和一个数据集。我想识别数据集中至少包含列表中两个单词的行。
我能够识别包含至少两个列表词的行,但我的代码也有问题地识别了重复单个列表词的行。
这是我的代码:
import pandas as pd
data={'Name':['Redred','redblue','redgreen','blue']}
df=pd.DataFrame(data)
df['Good colours'] = (df['Name'].str.contains("(red.*|blue.*|green.*){2,}",case=False, regex=True))
print(df)
在结果数据集中,'redred' 行在不应该返回 true 时返回。
为了排除重复的单词,我尝试了(red.*){1,}(blue.*){1,}(green.*){1},但这意味着不再识别“redblue”和“redgreen”(代码必须识别这些行。)
如何编写正则表达式以识别列表词的两个实例,同时排除列表词的重复实例?
【问题讨论】:
-
您要测试整行还是只测试单元格(即单列)?
-
单列 :-)
-
像“redredgreen”、“greenredred”或“redgreenred”这样的字符串呢?
-
在我看来,这超出了正则表达式应该做的事情。我认为你需要做
s.count('red')、s.count('green')、s.count('blue'),然后如果任何值> 1,则拒绝。这可能需要apply()。 -
我编辑了问题标题以反映对问题的新理解。