我有一个标题清单,我需要正常化。例如,如果标题中包含“CTO”,则需要将其更改为“首席技术官”。然而,我只想替换'CTO‘,如果没有字母直接在'CTO’的左边或右边。例如,“ctor”包含“cto”。显然我不想把这个换掉。不过,我确实希望在标题为“创始人/首席技术官”或“首席技术官/创始人”的情况下将其替换。
是否有一种方法可以使用regex检查字母是否在“CXO”之前?或者,完成这项任务的最佳方式是什么?
编辑:我的代码如下..。
test = 'Co-Founder/CTO'
test = re.sub("[^a-zA-Z0-9]CTO", 'Chief Technology Officer', test)结果是“共同创始人技术官”。“/”因某种原因被替换。然而,如果test =“CTO/联合创始人”,则不会发生这种情况。
发布于 2021-06-14 19:22:02
答案:"(?<=[^a-zA-Z0-9])CTO|^CTO"
从背后看,这是完美的选择
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发布于 2021-06-14 18:34:55
您想要的是一个正则表达式,它排除了点前的内容列表:
"[^a-zA-Z0-9]CTO"但是,实际上还需要检查CTO何时发生在行的开头:
"^CTO"要在re.sub中使用第一个表达式,可以添加一个分组运算符(()s),然后在替换中使用它来提取匹配的字符(例如,空格或/):
re.sub("([^a-zA-Z0-9])CTO","\\1Chief Technology Officer", "foo/CTO")会导致
'foo/Chief Technology Officer'https://stackoverflow.com/questions/67975304
复制相似问题