pandas用regex匹配单词时如何排除前接首字母大写单词的场景
解决方法
核心是给正则添加负向零宽回顾断言,排除目标单词前接首字母大写单词的场景即可,调整后的规则完全匹配你的需求。
正则调整说明
新的正则规则各部分作用:
(?<![A-Z][a-z]*\s):负向回顾断言,要求当前匹配位置的前面不能出现「首字母大写、后续跟任意数量小写字母、末尾是空格」的内容,正好排除姓名类前接大写单词的场景(?:{}):非捕获分组,包裹要匹配的多个备选单词,避免str.count统计时把捕获分组单独计数出现异常\b:单词边界,保证匹配的是完整单词,不会匹配到其他单词的片段
完整可运行代码
import pandas as pd data = {'text':["Kevin McDonald has bought a burger.", "The best burger in McDonald is cheeze buger."]} df = pd.DataFrame(data) long_list = ['McDonald', 'Five Guys'] # 调整后的正则规则 pattern = r'(?<![A-Z][a-z]*\s)\b(?:{})\b'.format('|'.join(long_list)) df['count'] = df.text.str.count(pattern) print(df)
运行输出
text count 0 Kevin McDonald has bought a burger. 0 1 The best burger in McDonald is cheeze buger. 1
内容的提问来源于stack exchange,提问作者codedancer
相关产品推荐
相关产品推荐

