我尝试使用正则表达式从Snort文件中提取信息。我已经成功获得了IP和SID,但我似乎无法提取文本的特定部分。
如何提取部分Snort日志文件?我尝试提取的部分可能看起来像[Classification: example-of-attack]
或[Classification: Example of Attack]
。但是,第一个例子可能有任意数量的连字符,而第二个例子没有任何连字符,但包含一些大写字母。
如何仅提取example-of-attack
或Example-of-Attack
?
我很遗憾只知道如何搜索静态词,例如:
test = re.search("exact-name", line)
t = test.group()
print t
我在网上尝试了很多不同的命令,但我似乎无法获得它。
答案 0 :(得分:1)
您可以使用以下正则表达式:
>>> m = re.search(r'\[Classification:\s*([^]]+)\]', line).group(1)
答案 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'