簡體   English   中英

Python REGEX將多行與回車符匹配

[英]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標志,因此如果需要,可以在此實例中將其刪除。

regex101演示


編輯:由於\\r\\n^M不是元字符,我建議這樣做:

(?<![\r\n])(?:(?:\\r\\n|\^M)?(?:\r\n|\r|\n)){2}((?:(?!\\r\\?n?|\\n|\^M)[^\r\n\x00])+)(?:\\r\\n|\^M)?

regex101演示

嘗試這個 :

(?:(?:\^M)|[\n\r])+(id=.*)(?=(?:\^M)|[\n\r])

在線查看演示

說明

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM