J'ai un script pour faire une recherche et un remplacement. il est basé sur un script here. Il a été modifié pour accepter le fichier en entrée mais il ne semble pas bien reconnaître regex.Python: remplace les étiquettes mais conserve le texte interne V2
Le script:
#!/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}}]].")
Ce que je veux est de remplacer
'[B]': '**',
'[/B]': '**',
avec une seule ligne comme celui-ci comme dans regex
\[B\](.*?)\[\/B\] : **\1**
Ce serait très utile avec BBcode des tags comme ceci:
[FONT=Arial]Hello, how are you?[/FONT]
Ensuite, je peux utiliser quelque chose comme ça
\[FONT=(.*?)\](.*?)\[\/FONT\] : ''\2''
Mais je ne peux pas sembler être en mesure de le faire avec ce script. Il y a une autre façon de faire une recherche regex et de la remplacer dans la source originale de ce script, mais cela fonctionne pour une étiquette à la fois en utilisant re.sub. Autre avantage de ce script que je peux ajouter autant de lignes que je veux afin que je puisse le mettre à jour plus tard.