Python:需要固定长度正则表达式吗?

我有这个使用前向和后向前瞻的正则表达式:

import re re.compile(")|(?<=") 

我正在尝试将它从C#移植到Python,但不断收到错误

 look-behind requires fixed-width pattern 

是否有可能在Python中重写它而不会失去意义?

这个想法是为了匹配类似的东西

  

更新

我正在使用lookarounds来解析我修改过的HTTP多部分文本

 body = r"""------abc Content-Disposition: form-data; name="upfile"; filename="file.txt" Content-Type: text/plain  ------abc Content-Disposition: form-data; name="upfile2"; filename="pic.png" Content-Type: image/png  ------abc Content-Disposition: form-data; name="note" this is a note ------abc-- """ multiparts = re.compile(...).split(body) 

我想在进行拆分时获取文件路径和其他文本,而不必删除开始和结束标记

代码简洁很重要,但我愿意改变<!inc(格式如果它使正则表达式可行。

对于同一数组中的路径+“所有”,只需拆分开始和结束标记:

 import re p = re.compile(r'''''') awesome = p.split(body) 

你说你对结束标签很灵活,if )!>可以在代码的其他地方出现,你可能想要考虑将那个结束标签更改为类似于)!/inc> (或任何东西,只要它是唯一的)。

看它运行。

从文档:

(?

匹配如果字符串中的当前位置前面没有匹配....这称为负后观断言。 与正向lookbehind断言类似,包含的模式必须仅匹配某些固定长度的字符串 。 以负反向断言开始的模式可以在被搜索的字符串的开头匹配。

(?<=...)

匹配,如果字符串中的当前位置前面是匹配...,结束于当前位置。 这被称为积极的后视断言。 (?<= abc)def将在abcdef中找到匹配项,因为lookbehind将备份3个字符并检查包含的模式是否匹配。 包含的模式必须只匹配某些固定长度的字符串 ,这意味着允许使用abc或a | b,但a *和a {3,4}不允许。 请注意,以正向后观断言开头的模式在搜索字符串的开头不匹配; 你很可能想要使用search()函数而不是match()函数:

强调我的。 不,我不认为你可以用它的当前forms将它移植到Python。

 import re pat = re.compile("\<\!inc\((.*?)\)\!\>") f = pat.match(r"").group(1) 

得到f == 'C:\My Documents\file.jpg'

回应Jon Clements:

 print re.escape("") 

结果是

 \<\!inc\(filename\)\!\> 

结论: re.escape似乎认为他们应该被逃脱。