通过混合 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.+status
或 status.+insufficient
匹配(即首先出现不足或状态)
我正在尝试使用 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.+status
或 status.+insufficient
匹配(即首先出现不足或状态)