在python中替换unigrams和n-gram而不改变单词

时间:2015-07-29 09:50:19

标签: python-3.x

这看起来应该是直截了当的,但事实并非如此,我想在python中实现字符串替换,要替换的字符串可以是unigrams或n-gram,但我不想替换包含在其中的字符串字。

例如:

x='hello world'
x.replace('llo','ll)

返回:

'hell world'

但我不希望这种情况发生。

在空格上拆分字符串适用于个别单词(unigrams),但我也想替换n-gram

这样:

'this world is a happy place to be'

转换为:

'this world is a miserable cesspit to be'

并且在空格上拆分不起作用。

Python3中是否有内置函数允许我这样做?

我能做到:

if len(new_string.split(' '))>1:
    x.replace(old_string,new_string)
else:
    x_array=x.split(' ')
    x_array=[new_string if y==old_string else y for y in x_array]
    x=' '.join(x_array)

1 个答案:

答案 0 :(得分:0)

你可以这样做:

import re

re_search = '(?P<pre>[^ ])llo(?P<post>[^ ])'
re_replace = '\g<pre>ll\g<post>'

print(re.sub(re_search, re_replace, 'hello world'))
print(re.sub(re_search, re_replace, 'helloworld'))

输出:

hello world
hellworld

请注意您需要再次添加prepost

现在我看到评论...... \b可能会更好。