首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列值中排除前缀子字符串

如何从列值中排除前缀子字符串
EN

Stack Overflow用户
提问于 2022-02-15 05:02:11
回答 1查看 34关注 0票数 0

我的目标是排除以No为前缀的行,例如,我对单词commerce感兴趣,然后我必须保留所有行包含commerce,并排除no commerce。我在找一个通用的解决方案

代码语言:javascript
复制
data = {
'description':[
    'Commerce foo', 
    'foo commercial',
    'foo no commercial',
    'foo commercial boo',
    'No commerce',
    'foo restaurant',
    'boo no restaurant']
}

df = pd.DataFrame(data)

    ______________________
    | description        |
__________________________
| 0 | Commerce foo       |
| 1 | foo commercial     |
| 2 | foo no commercial  |
| 3 | foo commercial boo |
| 4 | No commerce        |
| 5 | foo restaurant     |
| 6 | boo no restaurant  |
__________________________

我试过(不工作)

代码语言:javascript
复制
search = ['restaurant', 'commerce', 'commercial']

df['description'].str.findall(f'̂̂̂^(?<=no\s)({"|".join(search)})', flags=re.IGNORECASE)

我在找什么

代码语言:javascript
复制
    ______________________
    | description        |
__________________________
| 0 | Commerce foo       |
| 1 | foo commercial     |
| 3 | foo commercial boo |
| 5 | foo restaurant     |
__________________________
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-15 07:14:30

当前的模式从^(?<=no\s)开始,它断言从字符串开始,应该有一个no,后面跟着一个空格字符,直接放在左边。那是不匹配的。

如果要筛选行,可以使用str.contains而不是findall。

您可以删除锚点^,并将断言更改为(?<!no\s),这将断言不存在no,然后将空格字符直接放在左边,然后向左和右添加单词边界,以防止部分单词匹配。

对于仅匹配的对象,可以将捕获组更改为非捕获的(?:

如果你打印这个图案,它看起来就像

代码语言:javascript
复制
\b(?<!no\s)(?:restaurant|commerce|commercial)\b

regex演示

代码语言:javascript
复制
data = {
    'description':[
        'Commerce foo',
        'foo commercial',
        'foo no commercial',
        'foo commercial boo',
        'No commerce',
        'foo restaurant',
        'boo no restaurant']
}

df = pd.DataFrame(data)
search = ['restaurant', 'commerce', 'commercial']
print(df[df['description'].str.contains(fr'\b(?<!no\s)(?:{"|".join(search)})\b', flags=re.IGNORECASE)])

输出

代码语言:javascript
复制
          description
0        Commerce foo
1      foo commercial
3  foo commercial boo
5      foo restaurant
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71121309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档