首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用str.replace执行全字子串替换

用str.replace执行全字子串替换
EN

Stack Overflow用户
提问于 2019-01-02 15:48:19
回答 3查看 3.2K关注 0票数 0

我有一个示例数据帧文本列,其中包含字符串,包括单词'eng‘和单词'engine’。

代码语言:javascript
复制
ID  Text
1   eng is here
2   engine needs washing
3   eng is overheating 

我想把'eng‘改为'engine’。我使用以下代码:

代码语言:javascript
复制
df['Text'] = df['Text'].str.replace('eng', 'engine')

但这把我第二排的短信搞砸了。第二行变成

代码语言:javascript
复制
ID  Text
2   engineine needs washing

是否有一种方法来做单词替换,使它只替换时,整个词说‘英语’?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-02 15:53:56

从您自己的代码中添加一个空白并修复该问题

代码语言:javascript
复制
df['Text'].str.replace('eng ', 'engine ')
Out[736]: 
0            engine is here
1      engine needs washing
2    engine is overheating 
Name: Text, dtype: object

更新

代码语言:javascript
复制
df.Text.str.split(' ',expand=True).replace('eng','engine').fillna('').apply(' '.join,1)
Out[752]: 
0           engine is here 
1     engine needs washing 
2    engine is overheating 
dtype: object
票数 5
EN

Stack Overflow用户

发布于 2019-01-02 15:50:35

用单词边界字符\b包装关键字

代码语言:javascript
复制
df['Text'].str.replace(r'\beng\b', 'engine')

0           engine is here
1     engine needs washing
2    engine is overheating
Name: Text, dtype: object

如果要以这种方式替换多个关键字,请使用replace开关将字典传递给regex=True

代码语言:javascript
复制
repl = {'eng' : 'engine'}
repl = {rf'\b{k}\b': v for k, v in repl.items()}

df['Text'].replace(repl, regex=True)

0           engine is here
1     engine needs washing
2    engine is overheating
Name: Text, dtype: object
票数 9
EN

Stack Overflow用户

发布于 2019-01-02 15:51:04

您可以尝试这样的正则表达式:

代码语言:javascript
复制
import re
df['Text'] = df['Text'].map(lambda x: re.sub(r'\beng\b', 'engine', x))

这个给定的正则表达式中的\b标记与“forced边界”匹配,因此'eng‘将被迫被空格包围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54009249

复制
相关文章

相似问题

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