【发布时间】:2010-12-09 03:20:51
【问题描述】:
我有一个脚本来进行搜索和替换。它基于脚本here。 它被修改为接受文件作为输入,但它似乎不能很好地识别正则表达式。
脚本:
#!/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 一次只适用于一个标签。这个脚本的其他优点是我可以添加任意多的行,以便以后更新。
【问题讨论】: