只替换字符串中完全匹配的单词

2024-10-02 22:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名字列表,我希望当它们在字符串中完全出现时,它们被单词'PERSON'替换。但是,在下面的代码中,部分匹配也被'PERSON'替换。你知道吗

这就是我所拥有的:

test = 'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, Nicolaus Manfridus de Caxario et alij.'

testres = re.compile("|".join(names)).sub('PERSON', test)

结果:

'Testes huius rey sunt hij, videlicet, Magnificus Dominus PERSONohannes de Mazara, nobilis PERSONorgius de la Chabica, PERSON PERSON de Caxario et alij.'

因为'Peri'在列表中,所以'Periohannes'被替换为'PERSONohannes'

我该怎么修?你知道吗


Tags: test列表depersonhijtestesdominussunt
2条回答

不要加入名称列表,而是查找字符串中的所有单词,并检查找到的每个单词是否属于names

import re
test = 'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, Nicolaus Manfridus de Caxario et alij.'
new_test = re.sub('\w+', lambda x:'PERSON' if x.group() in names else x.group(), test)

这就是单词边界锚定\b的作用:

>>> test = 'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, Nicolaus Manfridus de Caxario et alij.'
>>> names = 'Nicolaus', 'Manfridus', 'Peri'
>>> names_regex = re.compile(r'\b'+'|'.join(names)+r'\b')
>>> names_regex.sub('PERSON',test)
'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, PERSON PERSON de Caxario et alij.'
>>> test = 'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, Nicolaus, Manfridus, de Caxario et alij.'
>>> names_regex.sub('PERSON',test)
'Testes huius rey sunt hij, videlicet, Magnificus Dominus Periohannes de Mazara, nobilis Georgius de la Chabica, PERSON, PERSON, de Caxario et alij.'

注意,它比两端的空格更普遍。。。i、 在第二个例子中用逗号。你知道吗

相关问题 更多 >