我正在编写一个脚本,用于在转换为汇合标记之前整理MediaWiki文件,这个特殊情况我需要修复MediaWiki中的页面链接,这个
[[this is a page]]
问题是实际的页面链接是this_is_a_page,通用wiki转换器在转换为汇合标记时不够智能,因此你最终会断开链接。
我一直在尝试创建一个正则表达式作为我的python脚本的一部分(我已经删除了html和其他一些标签,如< gallery>等,以下正则表达式选择了所有链接问题:
'\[\[(.*?)\]\]'
我只是找不到只选择[[]]中的空格的编程方式,所以我可以将它们替换为下划线。我尝试使用匹配但没有成功。
答案 0 :(得分:3)
尝试使用re.sub
和lambda表达式
>>> import re
>>> test = '[[this is a page]] bla bla [[this is another page]]'
>>> re.sub(r'\[\[.+?\]\]', lambda x:x.group().replace(" ","_"), test)
'[[this_is_a_page]] bla bla [[this_is_another_page]]'
答案 1 :(得分:2)
尝试下面的正则表达式并用下划线替换匹配的空格。
\s(?=[^\[\]]*]])
>>> import re
>>> s = " [[this is a page]] goo hghg"
>>> m = re.sub(r'\s(?=[^\[\]]*]])', "_", s)
>>> m
' [[this_is_a_page]] goo hghg'
\s(?=[^\[\]]*]]
,只有在[
或]
的任何字符后面都有零次或多次且两次关闭{{1}时,它才会与空格匹配括号。