有条件的后视(python regex),如何排除某些单词但包含某些单词?

时间:2015-03-16 02:24:59

标签: python regex lookbehind

我在创建python正则表达式字符串时只能检索有效的位置。

以4行示例以下段落:

  

在纽约分行享受高达70%的折扣。

     

在加拿大享受高达70%的折扣。

     

在伦敦分行无效。

     

在德国无效。

我只想获得“纽约分支”和“加拿大”的文本,而不是获得“伦敦分支机构”和“德国”。

这有效,但它有所有位置: ((?<=at ).*(?=\.))|((?<=in ).*(?=\.))

但为什么这不起作用: ((?<!not )((?<=at ).*(?=\.))|((?<!not )((?<=in ).*(?=\.))

具体来说:我希望所有文字都在“at”或“in”之后,以及完整停止之前。但是,如果有一个“无效”的前途,我不想要它们。

1 个答案:

答案 0 :(得分:2)

我认为上面的hwnd提供的答案是最好的方法

^(?!Not valid\b).*(?:at|in)(.*)\.$

但要回答你的问题,你要完成的是这个

(?<=(?<!not valid )(?:at|in) ).*(?=\.)

Demo