Замена слов в тексте [дубликат]

Для меня, git worktree - самое большое улучшение с давних времен. Я работаю над разработкой корпоративного программного обеспечения. Там очень часто приходится поддерживать старые версии, как то, что вы выпустили 3 года назад. Конечно, у вас есть ветка для каждой версии, чтобы вы могли легко переключиться на нее и исправить ошибку. Однако переключение дорого, потому что пока вы полностью реорганизовали хранилище и, возможно, создали систему. Если вы переключитесь, ваша среда IDE будет безумной, пытаясь адаптировать настройки проекта.

С помощью worktree вы можете избежать этой постоянной реконфигурации. Оформить эти ветви в отдельных папках с помощью рабочей таблицы. Для каждой ветви у вас есть независимый проект IDE.

Конечно, это могло быть сделано в прошлом путем клонирования репо несколько раз, и это был мой подход до сих пор. Тем не менее, это также означало расходование пространства жесткого диска и еще худшее, чтобы несколько раз получать одни и те же изменения от репо.

Теперь единственной недостающей частью является официальная версия git 2.5 для Windows, но есть надежда, что новый git для окон скоро выйдет: -)

6
задан Kevin Guan 24 February 2016 в 11:23
поделиться

5 ответов

import re

match = {}  # create a dictionary of words-to-replace and words-to-replace-with

f = open("filename", "r")
data = f.read()  # string of all file content


def replace_all(text, dic):
    for i, j in dic.items():
        text = re.sub(r"\b%s\b" % i, j, text)
        # r"\b%s\b"% enables replacing by whole word matches only
    return text


data = replace_all(data, match)
print(data)  # you can copy and paste the result to whatever file you like
0
ответ дан Chris Zhu 17 August 2018 в 20:48
поделиться
6
ответ дан DhruvPathak 17 August 2018 в 20:48
поделиться

Вы хотите регулярное выражение. Вы можете использовать токен \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)
12
ответ дан kindall 17 August 2018 в 20:48
поделиться
  • 1
    я должен заменить это для моего текущего скрипта? и в базе данных я должен добавить \ b перед каждым словом? – Renan Cidale 18 July 2013 в 19:21
  • 2
    например, \ bresult * \ bresultado *? – Renan Cidale 18 July 2013 в 19:22
  • 3
    Просто замените код, который у вас есть на этом ... скрипт добавляет \b s, поэтому вам не нужно иметь их в «базе данных». – kindall 18 July 2013 в 19:23
  • 4
    поэтому я заменяю код, который вы написали для того, что было в моем скрипте .. тогда я сохраняю .. тогда я написал & quot; Результат & quot; на третьей вкладке и добавьте результат Resultado в мою базу данных .. тогда я запустил скрипт .. но он не сработал – Renan Cidale 18 July 2013 в 19:25
  • 5
    @RenanCidale: добавьте \b до и после каждого слова, которое вы хотите сопоставить, но не на заменяющей строке. Убедитесь, что у вас сырые строки (r'a raw string'), в противном случае '\b' интерпретируется как обратное пространство. – Steven Rumbalski 18 July 2013 в 19:26

Используйте 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', чтобы убедиться, что совпадения предназначены только для целых слов.
  • Функция замены используется для замены любого соответствия.
8
ответ дан Samy Bencherif 17 August 2018 в 20:48
поделиться

Это очень просто. используйте 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.
2
ответ дан Sudharsan 17 August 2018 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: