当找不到子串B时,正则表达式只匹配子串A.

时间:2014-12-04 13:40:35

标签: python regex regex-lookarounds

之前似乎已经问过很多次了,但我找不到能解决我具体要求的答案。

输入字符串如:

1. The road is closed.
2. Closed road ahead.
3. There is a closed lane.
4. The lane is closed.

如果单词closed不是输入字符串的一部分,那么正则表达式与单词lane匹配的是什么?

应该尽可能通用
  • 单词lane可以在单词closed之前或之后存在,
  • 任何数量和类型的字词都可以位于laneclosed之间,而不仅仅是ais,如上例所示。

我期望在输入字符串1和2中匹配closed,但在3和4中不匹配(因为它们中的任何一个都包含禁用词lane)。

我尝试使用负向前瞻和后视图来执行此操作,但这仍然与所有四个输入字符串中closed的出现相匹配。

(?<!lane)(?!lane)(closed)

正则表达式是Python 3.4。

1 个答案:

答案 0 :(得分:4)

^(?!.*\blane\b)(?=.*\bclosed\b).*$

试试这个。参见演示。

http://regex101.com/r/yR3mM3/49