通过混合 AND 和 OR 使用 str.contains 识别子字符串

identify substring using str.contains by mixing AND and OR

我正在尝试使用 str.contains 识别给定字符串中的子字符串,同时混合使用 OR 和 AND

我知道 OR 可以表示为 |

str.contains("error|break|insufficient")

AND 可以表示为 AND

str.contains("error|break|insufficient") & str.contains("status")

我想将 OR 和 AND 混合在一起。示例是识别具有“错误”或“中断或(“不足”和“状态”)

的字符串

所以对于像这样的句子 “error break insufficient” -> 就可以识别了。但是现在不能了,因为句中没有“status”

一种方法:

import pandas as pd

# toy data
s = pd.Series(["hello", "world", "simple", "error", "break", "insufficient something status", "status"])

# create and mask
insufficient_and_status = s.str.contains("insufficient") & s.str.contains("status")

# create or mask
break_or_error = s.str.contains("error|break", regex=True)

# or the two mask
mask = break_or_error | insufficient_and_status

res = s[mask]
print(res)

输出

3                            error
4                            break
5    insufficient something status
dtype: object

备选方案,使用单个正则表达式:

mask = s.str.contains("error|break|(insufficient.+status|status.+insufficient)", regex=True)

res = s[mask]
print(res)

备选方案基于以下事实:如果字符串包含不足和状态,则至少有一个模式 insufficient.+statusstatus.+insufficient 匹配(即首先出现不足或状态)