2017-04-05 109 views
1

我寫了一個python腳本,將撥打電話到服務器並獲取響應。同時,爲服務器的呼叫時,它會在請求的主體通過幾個值。這個值應該是通過讀取文本文件來獲取的。文本文件示例如下。Python字符串提取文本文件

我的文本文件樣本:


Host: localhost:8080 
Connection: keep-alive 
..... 
..... 
{"token":"abcdefhutryskslkslksslslks=="}POST /fill/entry/login HTTP/1.1 

Host: localhost:8080 
Connection: keep-alive 
..... 
..... 
{"value":"abcdefghijklmnopqrstuvwxyz", 
"pass":"123456789zxcvbnmljhgfds", 
"token":"abcdefghijklmnopqrstuvwxyz=="}POST /fill/health HTTP/1.1 

在這裏,如果你可以看到,我得到不同的反應。我需要捕獲與開始{「值」並用「結尾}(所看到的樣品中的響應的第二部分)的字符串。

論堆棧溢出搜索,我跨場景來他們提取字符串但無論他們有一個明確的起點和一個明確的終點。在我的情況下,即使起點可以唯一使用搜索字符串「{」 URL」來識別,終點不能被認定爲文本文件還包含多個其他括號。

任何建議/上獲取從文本文件刺痛的特定部分(如上所述)將是真正有用的指針。

回答

2

從解釋甲re例如:

>>> with open('file') as f: 
... raw = f.read() 
>>> 
>>> import re 
>>> pat = re.compile(r'{"value":[^{]+}') 
>>> pat.findall(raw) 
['{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}'] 
>>> pat.search(raw).group() 
'{"value":"abcdefghijklmnopqrstuvwxyz",\n "pass":"123456789zxcvbnmljhgfds",\n "token":"abcdefghijklmnopqrstuvwxyz=="}' 
+0

感謝您的想法。我現在可以獲取價值。但是,如在您自己的解決方案中可用的那樣,它會顯示所有值。關於第二部分單獨如何被提取的任何想法?我的意思是,從字符串開始「{」值「並在結束」}」。 – mbvee

+0

感謝Klashxx ..這工作就像一個魅力。 – mbvee