Python 2.7中的Regex,用于从Snort日志文件中提取信息

时间:2014-07-28 23:39:02

标签: python regex python-2.7 snort

我尝试使用正则表达式从Snort文件中提取信息。我已经成功获得了IP和SID,但我似乎无法提取文本的特定部分。

如何提取部分Snort日志文件?我尝试提取的部分可能看起来像[Classification: example-of-attack][Classification: Example of Attack]。但是,第一个例子可能有任意数量的连字符,而第二个例子没有任何连字符,但包含一些大写字母。

如何仅提取example-of-attackExample-of-Attack

我很遗憾只知道如何搜索静态词,例如:

test = re.search("exact-name", line)
t = test.group()
print t

我在网上尝试了很多不同的命令,但我似乎无法获得它。

3 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

>>> m = re.search(r'\[Classification:\s*([^]]+)\]', line).group(1)

Explanation | Working Demo

答案 1 :(得分:0)

你可以使用look-behinds,

>>> s = "[Classification: example-of-attack]"
>>> m = re.search(r'(?<=Classification: )[^\]]*', s)
>>> m
<_sre.SRE_Match object at 0x7ff54a954370>
>>> m.group()
'example-of-attack'
>>> s = "[Classification: Example of Attack]"
>>> m = re.search(r'(?<=Classification: )[^\]]*', s).group()
>>> m
'Example of Attack'

如果字符串Classification:

后面有多个空格,请使用正则表达式模块
>>> import regex
>>> s = "[Classification:    Example of Attack]"
>>> regex.search(r'(?<=Classification:\s+\b)[^\]]*', s).group()
'Example of Attack

&#39;

答案 2 :(得分:0)

如果要将任何子字符串与模式[Word: Value]匹配,可以使用以下正则表达式,

ptrn = r"\[\s*(\w+):\s*([\w\s-]+)\s*\]"

我在这里使用了两个小组,一个用于第一个单词(&#34;分类&#34;在你的问题中),一个用于第二个单词(&#34;攻击示例&#34;或&#34;攻击示例&#34;)。它还需要打开和关闭方括号。例如,

txt1 = '[Classification: example-of-attack]'
m = re.search( ptrn, txt1 )
>>> m.group(2)
'example-of-attack'