正则表达式选择和替换双括号内的空格

时间:2014-09-16 09:17:15

标签: python regex

我正在编写一个脚本,用于在转换为汇合标记之前整理MediaWiki文件,这个特殊情况我需要修复MediaWiki中的页面链接,这个

[[this is a page]] 

问题是实际的页面链接是this_is_a_page,通用wiki转换器在转换为汇合标记时不够智能,因此你最终会断开链接。

我一直在尝试创建一个正则表达式作为我的python脚本的一部分(我已经删除了html和其他一些标签,如< gallery>等,以下正则表达式选择了所有链接问题:

'\[\[(.*?)\]\]'

我只是找不到只选择[[]]中的空格的编程方式,所以我可以将它们替换为下划线。我尝试使用匹配但没有成功。

2 个答案:

答案 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(?=[^\[\]]*]])

DEMO

>>> import re
>>> s = " [[this is a page]]    goo hghg"
>>> m = re.sub(r'\s(?=[^\[\]]*]])', "_", s)
>>> m
' [[this_is_a_page]]    goo hghg'

\s(?=[^\[\]]*]],只有在[]的任何字符后面都有零次或多次且两次关闭{{1}时,它才会与空格匹配括号。