首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :如何找到子字符串

Python :如何找到子字符串
EN

Stack Overflow用户
提问于 2021-06-14 18:16:48
回答 2查看 306关注 0票数 1

我有一个标题清单,我需要正常化。例如,如果标题中包含“CTO”,则需要将其更改为“首席技术官”。然而,我只想替换'CTO‘,如果没有字母直接在'CTO’的左边或右边。例如,“ctor”包含“cto”。显然我不想把这个换掉。不过,我确实希望在标题为“创始人/首席技术官”或“首席技术官/创始人”的情况下将其替换。

是否有一种方法可以使用regex检查字母是否在“CXO”之前?或者,完成这项任务的最佳方式是什么?

编辑:我的代码如下..。

代码语言:javascript
复制
test = 'Co-Founder/CTO'
test = re.sub("[^a-zA-Z0-9]CTO", 'Chief Technology Officer', test)

结果是“共同创始人技术官”。“/”因某种原因被替换。然而,如果test =“CTO/联合创始人”,则不会发生这种情况。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-14 19:22:02

答案"(?<=[^a-zA-Z0-9])CTO|^CTO"

从背后看,这是完美的选择

代码语言:javascript
复制
cto_re = re.compile("(?<=[^a-zA-Z0-9])CTO")

但是不幸的是,行的开始不能工作(因为python实现需要固定的长度)。

代码语言:javascript
复制
for eg in "Co-Founder/CTO", "CTO/Bossy", "aCTOrMan":
    print(cto_re.sub("Chief Technology Officer", eg))

Co-Founder/Chief Technology Officer
CTO/Bossy
aCTOrMan

您必须通过|显式地检查这一点。

代码语言:javascript
复制
cto_re = re.compile("(?<=[^a-zA-Z0-9])CTO|^CTO")
代码语言:javascript
复制
for eg in "Co-Founder/CTO", "CTO/Bossy", "aCTOrMan":
    print(cto_re.sub("Chief Technology Officer", eg))

Co-Founder/Chief Technology Officer
Chief Technology Officer/Bossy
aCTOrMan
票数 1
EN

Stack Overflow用户

发布于 2021-06-14 18:34:55

您想要的是一个正则表达式,它排除了点前的内容列表:

代码语言:javascript
复制
"[^a-zA-Z0-9]CTO"

但是,实际上还需要检查CTO何时发生在行的开头:

代码语言:javascript
复制
"^CTO"

要在re.sub中使用第一个表达式,可以添加一个分组运算符(()s),然后在替换中使用它来提取匹配的字符(例如,空格或/):

代码语言:javascript
复制
re.sub("([^a-zA-Z0-9])CTO","\\1Chief Technology Officer", "foo/CTO")

会导致

代码语言:javascript
复制
'foo/Chief Technology Officer'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67975304

复制
相关文章

相似问题

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