Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python在同一行上组合正匹配和负匹配_Python_Regex - Fatal编程技术网

Python在同一行上组合正匹配和负匹配

Python在同一行上组合正匹配和负匹配,python,regex,Python,Regex,我正在尝试搜索apache日志文件,以便提取没有特定字符串的行(“session”和“curl”),并且这些行必须有特定的月份字符串(“Dec”)。 这些搜索是独立工作的: re.search("^((?!session|curl).)*$", f[line]) re.search(r'Dec', f[line]) 我想知道我是否可以将它们合并到一个连接中? 我试过这个 re.search('|'.join('(?:{0})'.format(x) for x in (r'Dec', r'/^(

我正在尝试搜索apache日志文件,以便提取没有特定字符串的行(“session”和“curl”),并且这些行必须有特定的月份字符串(“Dec”)。 这些搜索是独立工作的:

re.search("^((?!session|curl).)*$", f[line])
re.search(r'Dec', f[line])
我想知道我是否可以将它们合并到一个连接中? 我试过这个

re.search('|'.join('(?:{0})'.format(x) for x in (r'Dec', r'/^((?!session|curl).)*/$')), f[line])
我希望看到带有正确月份的行,并排除带有字符串“session”和“curl”的行,但所有行都返回


请问我做错了什么?

是的,这是可能的。您需要构造一个类似正则表达式的

^(?!.*(?:session|curl)).*Dec
看。详情:

  • ^
    -字符串的开头
  • (?!.*(:session | curl))
    -行上不应出现
    session
    curl
    (如果添加点调用修饰符,将考虑整个字符串)
  • *Dec
    -尽可能多的任何0+字符(如果未使用DOTALL修饰符,则换行字符除外),直到最后一次出现
    Dec
    子字符串
如果需要整词匹配,请在组/词周围添加词边界(
\b

样本:


如果没有代码和数据(最好是以文本形式),就不可能知道自己做错了什么。虽然您可能会发现使用grep-vsome日志会更简单,但这个示例将非常有用,它的apache日志。我正在匹配日志行中的字符串。谢谢!这起作用了,我把我的数据放在演示中,结果非常棒!仅供参考:
^((?!session | curl)。*$
是一个非常消耗资源的结构(a)。尽可能避免,如果需要匹配其他字符串而不是其他字符串,请使用简单的lookaheads。
import re
words = ['session', 'curl']
month = 'Dec'
x = '|'.join([re.escape(w) for w in words])
m = re.search(r'^(?!.*({})).*{}'.format(x, month), 'Date: Dec 2016')
if m:
    print('Matched')