Cha*_*had 0 c# python regex lookbehind
我有这个使用前向和后向预测的正则表达式:
import re
re.compile("<!inc\((?=.*?\)!>)|(?<=<!inc\(.*?)\)!>")
Run Code Online (Sandbox Code Playgroud)
我正在尝试将其从 C# 移植到 Python,但不断收到错误
look-behind requires fixed-width pattern
Run Code Online (Sandbox Code Playgroud)
是否可以用 Python 重写它而不失去意义?
这个想法是为了让它匹配类似的东西
<!inc(C:\My Documents\file.jpg)!>
Run Code Online (Sandbox Code Playgroud)
更新
我正在使用lookarounds来解析我修改过的HTTP多部分文本
body = r"""------abc
Content-Disposition: form-data; name="upfile"; filename="file.txt"
Content-Type: text/plain
<!inc(C:\Temp\file.txt)!>
------abc
Content-Disposition: form-data; name="upfile2"; filename="pic.png"
Content-Type: image/png
<!inc(C:\Temp\pic.png)!>
------abc
Content-Disposition: form-data; name="note"
this is a note
------abc--
"""
multiparts = re.compile(...).split(body)
Run Code Online (Sandbox Code Playgroud)
我只想在进行分割时获取文件路径和其他文本,而不必删除开始和结束标签
<!inc(代码简洁很重要,但如果可以使正则表达式可行,我愿意更改格式。
从文档中:
(?<!...)
如果字符串中的当前位置前面没有匹配 ...,则匹配。这称为否定后向断言。与正向回顾断言类似,所包含的模式必须仅匹配某个固定长度的字符串。以否定后向断言开头的模式可能会在正在搜索的字符串的开头匹配。
(?<=...)
如果字符串中的当前位置前面有一个以当前位置结尾的 for ... 匹配项,则匹配。这称为积极的后向断言。(?<=abc)def 将在 abcdef 中找到匹配项,因为lookbehind 将备份 3 个字符并检查所包含的模式是否匹配。包含的模式必须仅匹配某个固定长度的字符串,这意味着允许使用 abc 或 a|b,但不允许使用 a* 和 a{3,4}。请注意,以肯定的后行断言开头的模式将不会在正在搜索的字符串的开头匹配;您很可能想使用 search() 函数而不是 match() 函数:
强调我的。不,我不认为您可以将其以当前形式移植到 Python。