2017-01-06 25 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) 
相关问题