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
似乎认为他们应该被逃脱。
- 如何制作任务栏windows-CE中的程序
- 任何具有良好unit testing的ASP.NET(WebForm)应用程序(CodePlex或任何地方)?
- 使用XPATH或CSS Selector在Selenium中查找元素
- 在asp.net,C#安排电子邮件
- 在调用新Action时帮助理解C#语法
- 添加天数到日期但不包括周末
- IErrorInfo.GetDescription失败时带有E_FAIL(0x80004005).System.Data而数据适配器Fill()
- 在WinForms中以可本地化的forms在运行时更改CurrentUICulture
- 在ASP.NET Core中使用Swagger中的JWT(授权:承载)