Python:re.sub对于同一模式的多个连续出现,每隔一个匹配就跳过一次

2024-10-01 00:28:06 发布

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

我打算使用re.sub()替换文档中出现的所有stopwords。我尝试的第一件事是显而易见的:

re.sub('how|to', 
       '@', 
       'how to do this thing') 
#Replacing with @ for easy identification of replaced words

正如预期的那样,这将返回'@ @ do this thing'。然而,这也会匹配子词,而不一定是整个词。比如说

re.sub('how|to', 
       '@', 
       'how to do this thinghowto'

返回'@ @ do this thing@@'。因为我只想匹配整个单词,所以我尝试了

re.sub('(^|\s)how($|\s)|(^|\s)to($|\s)',
       '@',
       'how to do this thinghowto')

它返回'@to do this thinghowto'。看起来图案与“to”不匹配。为了了解情况是否如此,我测试了:

re.sub('(^|\s)how($|\s)|(^|\s)to($|\s)',
       '@',
       'how to to how how howtohowto to how')

然后得到'@to@how@howtohowto@how'。该模式似乎跳过了每一次匹配,但它只匹配整个单词的出现。(如果您熟悉ML的说法,它看起来有一个完美的精确度,但只有50%的召回率。)为什么会发生这种情况,我可以做些什么来解决这个问题


Tags: to文档reforwith情况this单词