【发布时间】:2017-08-17 13:47:02
【问题描述】:
我正在处理 POST 正文的内容,并希望提取每个键的值。我要解析的数据是:
s = b'----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="username"\r\n\r\nmyusername\r\n----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="password"\r\n\r\nmypassword\r\n----------------------------941135026682458398564529\r\nContent-Disposition: form-data; name="keyword"\r\n\r\nmykeyword\r\n----------------------------941135026682458398564529--\r\n'
我想通过使用 Python 的 re 模块获得值 myusername、mypassword 和 mykeyword。出于这个原因,我生成了这个模式:
pattern = r'\bname=\"{}\"\\r\\n\\r\\n([^-]+)\\r'
然后根据需要对其进行修改以匹配每个键:
username_pattern = re.compile(pattern.format("username"))
password_pattern = re.compile(pattern.format("password"))
keyword_pattern = re.compile(pattern.format("keyword"))
我面临的问题是所有反斜杠都被转义了,所以当我定义pattern 时,我得到每个反斜杠都被转义,而不是保留之前定义的值:
'\\bname=\\"{}\\"\\\\r\\\\n\\\\r\\\\n([^-]+)\\\\r'
然后,当我运行 <any of the compiled patterns>.search(s) 方法时,没有匹配项。我已经测试了模式here,它对每个关键字都按预期工作。如何避免这种反斜杠转义?而且,如果我问的不是必要的,我做错了什么?提前致谢。
【问题讨论】:
-
r'\bname="{}"\r\n\r\n([^-]+)\r'也应该可以工作。不要过度使用反斜杠,你已经在使用 raw 了。 -
@Jean-FrançoisFabre 就是这样。感谢您指出。添加您的评论作为答案。
标签: regex python-3.x escaping backslash