如何在pandas中使用正则实现多条件文本模式匹配检测
正则多条件匹配DataFrame文本实现方案
你原来的写法存在几处错误:
re.match仅从字符串开头匹配规则,要检测文本任意位置存在目标模式,应该用re.search- 正则中方括号
[]是字符组匹配规则,不能用来包裹多模式的或逻辑,应该直接用|分隔不同匹配条件 [NUM]里的方括号是正则特殊字符,需要转义才能匹配字面量,时间词的单复数可以用s?简化匹配- 规则中「至少2个连续问号」需要用量词
{2,}实现,感叹号只要出现1次就满足条件不需要额外加量词
正确实现代码
import re # 组合三个匹配条件,用|分隔表示满足任意一个即可 pattern = r'\[NUM\] (time|minute|hour)s?|!|\?{2,}' # re.search匹配到返回对象,转bool就是True,匹配不到返回None转bool是False df['available'] = df['text'].apply(lambda x: bool(re.search(pattern, x)))
正则规则说明
\[NUM\] (time|minute|hour)s?:匹配[NUM] time/[NUM] times等所有你需要的时间相关模式,s?表示后缀s可出现0或1次,同时覆盖单复数场景!:匹配任意位置的感叹号,出现1次即满足条件\?{2,}:匹配至少2个连续的问号
运行后得到的available列结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者sariii
相关产品推荐
相关产品推荐

