0

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

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

我怎么能只提取example-of-attackor Example-of-Attack

不幸的是,我只知道如何搜索静态词,例如:

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

我在网上尝试了许多不同的命令,但我似乎不明白。

4

3 回答 3

1

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

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

解释|工作演示

于 2014-07-28T23:41:46.457 回答
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

'

于 2014-07-28T23:46:16.217 回答
0

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

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

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

txt1 = '[Classification: example-of-attack]'
m = re.search( ptrn, txt1 )
>>> m.group(2)
'example-of-attack'
于 2014-07-28T23:51:16.613 回答