首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取最长匹配

提取最长匹配
EN

Stack Overflow用户
提问于 2019-04-07 23:02:16
回答 2查看 146关注 0票数 2

考虑一下这个简单的设置

代码语言:javascript
复制
import pandas as pd

df = pd.DataFrame({'id' : [1,2,3],
                   'text' : ['stack-overflow',
                             'slack-overflow',
                             'smack-over']})
df
Out[9]: 
   id            text
0   1  stack-overflow
1   2  slack-overflow
2   3      smack-over

我有一个给定的正则表达式,我想提取最长的匹配。我知道我可以使用str.extractall来获取所有的匹配,但是如何有效地获得最长的匹配(作为dataframe中的列df['mylongest'] )?

当然,在这个例子中最长的匹配是溢出、溢出和smack。

代码语言:javascript
复制
df.text.str.findall(r'(\w+)')
Out[10]: 
0    [stack, overflow]
1    [slack, overflow]
2        [smack, over]
Name: text, dtype: object
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-07 23:07:03

让我们将max映射到str.findall的结果。我使用functools.partial来避免lambdas。

代码语言:javascript
复制
from functools import partial

f = partial(max, key=len)
df['text'].str.findall(r'(\w+)').map(f)

0    overflow
1    overflow
2       smack
Name: text, dtype: object
票数 2
EN

Stack Overflow用户

发布于 2019-04-07 23:47:18

如果您想在pandas中尝试一些东西

代码语言:javascript
复制
s=df.text.str.extractall(r'(\w+)')[0]
s[s.str.len().eq(s.str.len().max(level=0),level=0)]
Out[51]: 
   match
0  1        overflow
1  1        overflow
2  0           smack
Name: 0, dtype: object
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55564428

复制
相关文章

相似问题

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