【问题标题】:Conditional look-behind (python regex), how to exclude certain words but include certain words?条件后视(python regex),如何排除某些单词但包含某些单词?
【发布时间】:2015-03-16 02:24:58
【问题描述】:

我在创建 python 正则表达式字符串以仅检索有效地点时遇到问题。

以下面4行的段落为例:

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

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

在伦敦分行无效。

在德国无效。

我只想获取“New York branches”和“Canada”的文本,而不获取“London branches”和“Germany”。

这可行,但它得到了所有位置: ((?<=at ).*(?=\.))|((?<=in ).*(?=\.))

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

特别是:我想要在单词“at”或“in”之后以及句号之前的所有文本。但是,如果前面有“无效”,我不想要它们。

【问题讨论】:

  • 选择的标准不是很清楚。请解释清楚
  • 跳过后面的内容并使用类似^(?!not valid\b).*?(?:at|off).*\.$
  • 嗨@thefourtheye,具体来说,我想要'at'或'in'这个词之后以及句号之前的任何内容。但是,如果前面有“无效”,我不想要它们。
  • 对 HamZa 正则表达式的微调:regex101.com/r/tR9aI7/2
  • ^(?!Not valid\b).*(?:at|in)(.*)\.$

标签: python regex lookbehind


【解决方案1】:

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

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

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

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

Demo

【讨论】:

  • 嗨@alpha bravo,测试了hwnd的解决方案是否有效,是的,我试图使用lookbehind来完成,但是我已经尝试了你的第二个代码,它似乎不适用于Python Regex,它仍在占领伦敦和德国。 goo.gl/KLss2t
  • 啊好吧我找到原因了,是因为小写'not':)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2011-09-27
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多