[英]Python REGEX matching a multiline with carriage return
我有以下數據:
POST / HTTP/1.1
User-Agent: curl/7.27.0
Host: 127.0.0.1
Accept: */*
Content-Length: 55
Content-Type: application/x-www-form-urlencoded
id=1234&var=test&nextvar=hh%20hg&anothervar=BB55SSKKKkk
要么
POST / HTTP/1.1\r\n
User-Agent: curl/7.27.0\r\n
Host: 127.0.0.1\r\n
Accept: */*\r\n
Content-Length: 55\r\n
Content-Type: application/x-www-form-urlencoded\r\n
\r\n
id=1234&var=test&nextvar=hh%20hg&anothervar=BB55SSKKKkk\r\n
要么
POST / HTTP/1.1^M
User-Agent: curl/7.27.0^M
Host: 127.0.0.1^M
Accept: */*^M
Content-Length: 55^M
Content-Type: application/x-www-form-urlencoded^M
^M
id=1234&var=test&nextvar=hh%20hg&anothervar=BB55SSKKKkk^M
如何僅匹配id=1234&var=test&nextvar=hh%20hg&anothervar=BB55SSKKKkk
字符串? 我的意思end of line
two end of lines
( \\r\\n or ^M
)和行的下一個end of line
( \\r\\n or ^M
)之間可以打印的任何內容,我嘗試過類似的操作:
re.findall(r'^>([^\r\n]+)[\r\n]([a-zA-Z0-9=%&\r\n]+)', buf, re.MULTILINE|re.DOTALL)
但沒有匹配。 我究竟做錯了什么?
我不確定您為什么在正則表達式的開頭輸入>
。 這就是使您根本無法獲得任何比賽的原因。 如果現在將其刪除,那么似乎不需要很多匹配項。
我會建議:
(?<![\r\n])(?:\r\n|\r|\n){2}[^\r\n]+
這樣可以確保在要匹配的行之前只有2個連續的換行符(兩個\\r\\n
, \\r
或\\n
)。 強制執行反向查找(?<![\\r\\n])
(如果在兩個連續的換行符之前有換行符/回車符,則匹配失敗)。
上面的正則表達式實際上並不需要多行和dotall標志,因此如果需要,可以在此實例中將其刪除。
編輯:由於\\r
, \\n
和^M
不是元字符,我建議這樣做:
(?<![\r\n])(?:(?:\\r\\n|\^M)?(?:\r\n|\r|\n)){2}((?:(?!\\r\\?n?|\\n|\^M)[^\r\n\x00])+)(?:\\r\\n|\^M)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.