搜索并替换为“仅限全字”选项

时间:2013-07-18 18:01:13

标签: python

我有一个脚本会运行到我的文本中并搜索并替换我在数据库中编写的所有句子。

剧本:

with open('C:/Users/User/Desktop/Portuguesetranslator.txt') as f:
    for l in f:
        s = l.split('*')
        editor.replace(s[0],s[1])

数据库示例:

Event*Evento*
result*resultado*

等等......

现在发生的事情是,我需要在该剧本中使用“全文”,因为我发现自己遇到了问题。

例如ResultEvent,因为当我替换ResultadoEvento时,我再次在文本中运行脚本,脚本再次替换ResultadoEvento

运行脚本后的结果与ResultadoadoEventoo类似。

就这样你们都知道..它不仅仅针对事件和结果,还有超过1000多个句子我已经为搜索设置并替换为工作..

我不需要简单的搜索和替换两个单词..因为我将一遍又一遍地为不同的句子编辑数据库..

5 个答案:

答案 0 :(得分:14)

你想要一个正则表达式。您可以使用令牌\b来匹配字边界:即,\bresult\b只匹配确切的字词“结果”。

import re

with open('C:/Users/User/Desktop/Portuguesetranslator.txt') as f:
    for l in f:
        s = l.split('*')
        editor = re.sub(r"\b%s\b" % s[0] , s[1], editor)

答案 1 :(得分:9)

使用re.sub

replacements = {'the':'a', 
                'this':'that'}

def replace(match):
    return replacements[match.group(0)]

# notice that the 'this' in 'thistle' is not matched 
print re.sub('|'.join(r'\b%s\b' % re.escape(s) for s in replacements), 
        replace, 'the cat has this thistle.') 

打印

a cat has that thistle.

注意:

  • 所有要替换的字符串都连接成一个模式 字符串只需要循环一次。

  • 将源字符串传递给re.escape以避免 将它们解释为正则表达式。

  • 单词被r'\b'包围,以确保匹配 只有整个单词。

  • 使用替换功能,以便可以替换任何匹配。

答案 2 :(得分:7)

使用re.sub而不是普通的字符串替换来替换整个单词。因此,即使它再次运行,您的脚本也不会替换已经替换的单词。

>>> import re
>>> editor = "This is result of the match"
>>> new_editor = re.sub(r"\bresult\b","resultado",editor)
>>> new_editor
'This is resultado of the match'
>>> newest_editor = re.sub(r"\bresult\b","resultado",new_editor)
>>> newest_editor
'This is resultado of the match'

答案 3 :(得分:3)

很简单。使用re.sub,不要使用replace。

import re
replacements = {r'\bthe\b':'a', 
                r'\bthis\b':'that'}

def replace_all(text, dic):
    for i, j in dic.iteritems():
        text = re.sub(i,j,text)
    return text

replace_all("the cat has this thistle.", replacements)

会打印

a cat has that thistle.

答案 4 :(得分:0)

git commit -m "your commit message"