Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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_Python 2.7_Regex Lookarounds - Fatal编程技术网

Python 负前瞻-如果找到单词,是否排除整个匹配?

Python 负前瞻-如果找到单词,是否排除整个匹配?,python,regex,python-2.7,regex-lookarounds,Python,Regex,Python 2.7,Regex Lookarounds,我试图解析文本日志,我只对文本的特定部分感兴趣。 我认为我做得很好,直到我注意到我无意中识别了部分 假设我想匹配以下部分 第7节-提供终端诊断 这也可能表现为 第7节。提供终端诊断 但是,如果单词see或under位于我的字符串前面,我不想匹配任何内容,如下所示 见第7节。提供终端诊断 或 根据第7条提交。提供终端诊断 不应该匹配任何东西 我试着用一个消极的前瞻,但它只排除了单词,并没有排除整个比赛 ((?!see )Section[\s\\n]+7[\s+]+?[-:\\n\.]+?[\s+]

我试图解析文本日志,我只对文本的特定部分感兴趣。 我认为我做得很好,直到我注意到我无意中识别了部分

假设我想匹配以下部分

第7节-提供终端诊断

这也可能表现为

第7节。提供终端诊断

但是,如果单词see或under位于我的字符串前面,我不想匹配任何内容,如下所示

见第7节。提供终端诊断

根据第7条提交。提供终端诊断

不应该匹配任何东西

我试着用一个消极的前瞻,但它只排除了单词,并没有排除整个比赛

((?!see )Section[\s\\n]+7[\s+]+?[-:\\n\.]+?[\s+]+?(Delivering|Deliver)(.*terminal[\s+]+Diagnosis('s)?)?[\.]?)

我认为我没有正确理解环顾四周的概念。帮助?

负前瞻按其说明执行:指定在主表达式之后无法匹配的组。但你之前什么都没有

使用负回溯:

(?<!see|under)
(?
代替
(?!请参见)


其他注释:您有一个大小写错误(terminal应该是terminal),如果您将整个字符串设置为“raw”通过在它前面加上一个r,比如
r'my string'
,您不需要像
\n

这样的双转义字符。负前瞻性就是这样做的:指定一个在主表达式后面不能匹配的组。但是前面没有任何内容

使用负回溯:

(?<!see|under)
(?
代替
(?!请参见)

其他注释:您有一个大小写错误(terminal应该是terminal),如果您在整个字符串前面加上一个r,如
r'my string'
,那么您不需要像
\n

这样重复转义字符,请尝试以下操作

对于用于匹配的任何情况,我都会在正则表达式前面使用
r
r
是Python用于正则表达式模式的原始字符串表示法,为了避免转义,为了避免查找大写或小写,请使用
re.I
进行不区分大小写的匹配

这里有一个可能的解决方案,使用双负查找

(?<!see)(?<!under)\s+(section 7[\s.:-]+(?:deliver(?:ing)?).*?terminal\s+diagnosis(?:'s)?)
试试下面的方法

对于用于匹配的任何情况,我都会在正则表达式前面使用
r
r
是Python用于正则表达式模式的原始字符串表示法,为了避免转义,为了避免查找大写或小写,请使用
re.I
进行不区分大小写的匹配

这里有一个可能的解决方案,使用双负查找

(?<!see)(?<!under)\s+(section 7[\s.:-]+(?:deliver(?:ing)?).*?terminal\s+diagnosis(?:'s)?)

感谢您提供有关使用r'标志的提示,非常有用。但是,(?@Baywatch您需要在负Lookback表达式后面加一个空格(或\s)。或者,我想可以将其放在表达式中。感谢您提供有关使用r'标志的提示,非常有用。但是,(?@Baywatch您需要一个空格(或\s)在否定的lookbehind表达式之后。或者把它放到表达式中,我想。谢谢。看起来roippi也是正确的,但是你付出了那么多的努力来真正帮助我理解。谢谢。谢谢。看起来roippi也是正确的,但是你付出了那么多的努力来真正帮助我理解。谢谢。down vot怎么了e?一个解释会很有帮助,否则我就没有希望解决我的帖子中存在的任何缺陷。否决票是怎么回事?一个解释会很有帮助,否则我就没有希望解决我的帖子中存在的任何缺陷。