У меня есть скрипт для поиска и замены. он основан на скрипте здесь .
Он был изменен, чтобы принимать файл в качестве входных данных, но, похоже, он плохо распознает регулярные выражения.
Сценарий:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, os
import re
import glob
_replacements = {
'[B]': '**',
'[/B]': '**',
'[I]': '//',
'[/I]': '//',
}
def _do_replace(match):
return _replacements.get(match.group(0))
def replace_tags(text, _re=re.compile('|'.join((r) for r in _replacements))):
return _re.sub(_do_replace, text)
def getfilecont(FN):
if not glob.glob(FN): return -1 # No such file
text = open(FN, 'rt').read()
text = replace_tags(text, re.compile('|'.join(re.escape(r) for r in _replacements)))
return replace_tags(text)
scriptName = os.path.basename(sys.argv[0])
if sys.argv[1:]:
srcfile = glob.glob(sys.argv[1])[0]
else:
print """%s: Error you must specify file, to convert forum tages to wiki tags!
Type %s FILENAME """ % (scriptName, scriptName)
exit(1)
dstfile = os.path.join('.' , os.path.basename(srcfile)+'_wiki.txt')
converted = getfilecont(srcfile)
try:
open(dstfile, 'wt+').write(converted)
print 'Done.'
except:
print 'Error saving file %s' % dstfile
print converted
#print replace_tags("This is an [[example]] sentence. It is [[{{awesome}}]].")
То, что я хочу, это заменить
'[B]': '**',
'[/B]': '**',
только с одной строкой, как в регулярном выражении
\[B\](.*?)\[\/B\] : **\1**
Это очень полезно для BBcode-тегов, таких как:
[FONT=Arial]Hello, how are you?[/FONT]
Тогда я могу использовать что-то вроде этого
\[FONT=(.*?)\](.*?)\[\/FONT\] : ''\2''
Но я не могу сделать это с помощью этого сценария. Существуют и другие способы поиска и замены регулярных выражений в исходном коде этого скрипта, но он работает для одного тега за раз, используя re.sub. Другое преимущество этого скрипта в том, что я могу добавить столько строк, сколько захочу, чтобы я мог обновить его позже.