2017-01-06 48 views
0

我剛開始學習Python,我對如何從文本中查找給定格式的所有字符串元素感到困惑。例如:有誰知道如何從文本輸出給定格式的字符串?

# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
# 
# 
alert tcp $HOME_NET any -> 50.116.1.225 22 (msg:"ET CNC Shadowserver Reported CnC Server Port 22 Group 1"; flow:to_server; flags:S; reference:url,doc.emergingthreats.net/bin/view/Main/BotCC; reference:url,www.shadowserver.org; threshold: type limit, track by_src, seconds 360, count 1; classtype:trojan-activity; flowbits:set,ET.Evil; flowbits:set,ET.BotccIP; sid:2405000; rev:4483;) 

這是整個文本的一個非常小的一部分,我想要做的就是從文本得到像50.116.1.225 22的所有IP地址。我已經嘗試了很長一段時間,如果有人能回答我的問題,我將不勝感激。

+0

是否所有文字使用該格式的線條,用'{文本} - > IP {括號內的東西}'(其中'{文本}'和'{括號內的東西}'基本上是一樣的上面的示例行? –

+2

使用[正則表達式](https://www.regex101.com/r/ffpBvL/1) – dawg

+1

歡迎來到Stack Overflow。不要告訴我們你已經嘗試了。我們可以指出如何從那裏開始 –

回答

1

這聽起來像你會想要使用正則表達式。如果我理解正確的問題,以下是簡單的,但並不完美,如果你的文本已經是一個字符串(它沒有指定你的文字是什麼)命名爲alerts

import re 

results = re.findall("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", alerts) 

for item in results: 
    print(item) 

輸出:

50.116.1.225 
+1

是的!這就是我想要實現的。謝謝老兄 –

1

你可能想要使用正則表達式。這使您可以從字符串中提取特定模式的字符。

import re 

pat = re.compile(r'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3} 
        (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b') 

for ip in re.findall(pat, text): 
    print(ip) 
相關問題