2012-05-16 81 views
0

我是一个Python的正则表达式新手,所以我承担......全球取代负向预测?

我有一个长期的,多行字符串,在我所取代[[...]]与其他字符串的目录部分东西,但只有他们不以'file://'开头,例如

s= 'chk1 [[file:///excursions/digital/MindMaps/|mm]], 
    local file [[file:///inFolder/tmptest/a/fan.txt|a/fan.txt]] 
    and nonlocal [[/excursions/books/calsync.txt|/excursions/books]]' 

我用的这个变化(目前替换字符串只是一个我发现了什么检查):

re.sub('\[\[(?!file:)(^])*',"found:<\\1>",s) 

但我得到一个“sre_constants.error:无与伦比组”。你知道我做错了什么吗?

谢谢!

亚历山德罗

回答

1

你缺少[]运营商在第二组:

'\[\[(?!file:)(^])* 

应该

'\[\[(?!file:)([^\]]*)' 

这是当你有很多o时也更好地使用原始字符串f逃脱:

re.sub(r'\[\[(?!file:)([^\]]*)', r"found:<\1>", s) 
+0

它的工作原理,谢谢!我只是不确定在正则表达式中使用r有什么用处:它甚至在没有... – alessandro

+0

@alessandro:不客气。 [Re documentation](http://docs.python.org/library/re.html)解释了为什么使用原始字符串更好。 – georg

0

你方括号中是无与伦比的,由于逃避