Python 正则表达式:如何查找子字符串

Python Regex: How to find a substring

我有一个需要规范化的标题列表。例如,如果标题包含 'CTO',则需要将其更改为 'Chief Technology Officer'。但是,如果 'CTO' 的左边或右边没有字母,我只想替换 'CTO'。例如,'Director' 包含 'cto'。我显然不希望它被替换。但是,我确实希望在标题为 'Founder/CTO' 或 'CTO/Founder'.

的情况下替换它

有没有办法使用正则表达式检查 字母 是否在 'CXO' 之前?或者完成这项任务的最佳方法是什么?

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

test = 'Co-Founder/CTO'
test = re.sub("[^a-zA-Z0-9]CTO", 'Chief Technology Officer', test)

结果是'Co-FounderChief Technology Officer'。 '/' 由于某种原因被替换。但是,如果 test = 'CTO/Co-Founder'.

则不会发生这种情况

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

"[^a-zA-Z0-9]CTO"

但您实际上还需要检查 CTO 何时出现在行的开头:

"^CTO"

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

re.sub("([^a-zA-Z0-9])CTO","\1Chief Technology Officer", "foo/CTO")

将导致

'foo/Chief Technology Officer'

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

Lookbehinds 非常适合这个

cto_re = re.compile("(?<=[^a-zA-Z0-9])CTO")

但遗憾的是行首不起作用(仅由于 python 实现需要固定长度)。

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

您必须通过 |:

明确检查
cto_re = re.compile("(?<=[^a-zA-Z0-9])CTO|^CTO")
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