Python 在相当复杂的日志文件中查找URL和用户代理

Python 在相当复杂的日志文件中查找URL和用户代理,python,regex,Python,Regex,我有一个正则表达式: 我试图捕获URL等于http://mydomain.de/uriPath,例如,尚未工作: [^\\\]+(?=https?:\/\/(?:www\)?mydomain\.de[^\\\\]+)使用下面的类似方法 [^|]+(?=\|[^\|]*(?:https?:\/\/)(?:www\.)?mydomain\.de[^\|]+) 或 使用 通过分裂, import re s = "1413323829.0907|172.168.1.0| |somedomain.

我有一个正则表达式:

我试图捕获URL等于
http://mydomain.de/uriPath
,例如,尚未工作:

[^\\\]+(?=https?:\/\/(?:www\)?mydomain\.de[^\\\\]+)

使用下面的类似方法

[^|]+(?=\|[^\|]*(?:https?:\/\/)(?:www\.)?mydomain\.de[^\|]+)

使用

通过分裂,

import re
s = "1413323829.0907|172.168.1.0|  |somedomain.com|OK|0015e248f2484591f52ed37030001|st=bla&cp=huh%2Cs_de%2Cf_bt%2Ce_rc%2Ch_sub%2Cl_ol%2Ca_noapp%2Cp_npaid%2Ci_t-e&sv=i2&pt=CP&rf=www.google.de&r2=https%3A%2F%2Fwww.google.de%2F&ur=mydomain.de&xy=1366x768x24&lo=DE%asdaasdasdcb=0009&vr=306&id=guccjs&lt=1413373830843&ev=&cs=w2dwmo&mo=1&la=1413773766|i00=0615e248f8484591f52ed47030001%3B543e5f46%3B55966cde|Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/527.36 (KHTML, like Gecko) Chrome/37.0.2162.124 Safari/527.36|http://mydomain.de/uriPath|023|web|OK|OK"
L = s.split('|')
previous = ''
for i in L:
    if re.match(r'[^\|]*(?:https?:\/\/)(?:www\.)?mydomain\.de[^\|]+', i):
        print(previous)
    previous = i
输出:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/527.36 (KHTML, like Gecko) Chrome/37.0.2162.124 Safari/527.36
那怎么办

\|[^|]+\|(?=https?:\/\/(?:www\.)?mydomain\.de[^\|]+)
例如:

如果您不希望启动和跟踪
|
,请将它们添加到环视断言中,如下所示

(?<=\|)[^|]+(?=\|https?:\/\/(?:www\.)?mydomain\.de[^\|]+)
它的作用是什么?


(?拆分为
(如果使用csv库更好),然后检查域是否与正则表达式匹配。我想对用户代理进行grep,而不是URL进行grep。是的,现在可以了,但是,在您的答案中仍然有一个前瞻性。使用捕获组添加了另一个。无需断言。
\\\\\\([^\]+)\\\\\\\(?=https:\/\/(?:www.)?mydomain\.de[^\\\]+)
就足够了,演示:@sirbenji顺便说一句,
(?=https?:\/\/(?:www\)?mydomain\.de[^\\\]+)
是一种断言。@Sirbenji捕获组有时在减少环顾开销方面也很好。最近我对环顾有了一个清晰的了解,我倾向于在正则表达式中使用它们。对此感到抱歉。我会将它们添加到我的回答中。谢谢:)我的意思是,似乎没有必要再添加一个,例如
(?断言会增加复杂性。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/527.36 (KHTML, like Gecko) Chrome/37.0.2162.124 Safari/527.36
\|[^|]+\|(?=https?:\/\/(?:www\.)?mydomain\.de[^\|]+)
(?<=\|)[^|]+(?=\|https?:\/\/(?:www\.)?mydomain\.de[^\|]+)
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/527.36 (KHTML, like Gecko) Chrome/37.0.2162.124 Safari/527.36
\|([^|]+)\|(?:https?:\/\/(?:www\.)?mydomain\.de[^\|]+)