2014-12-04 48 views
2

这似乎已被问过很多次,但我找不到任何答案来解决我的具体请求。正则表达式只匹配子字符串A时子字符串B未找到

有输入字符串,如:

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之间的立场,这不仅a或如在上面的例子中使用的那样。

我会期望在输入串1和2是匹配closed,但不是在3和4(因为其中一方包含禁止词素lane)。

我试图做到这一点与消极lookaheads和lookbehinds,但这仍然匹配在所有四个输入字符串中发生closed

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

正则表达式的味道是Python 3.4。

+1

要测试reghex尝试http://pythex.org/或http://www.pythonregex.com/ – 2014-12-04 13:50:49

回答

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

试试看。

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

+0

这是一个很好的解决方案。 – Matthias 2014-12-04 13:43:45

+0

酷!你是否也知道如何让它只匹配“closed”而不是整个字符串? – Dirk 2014-12-04 14:16:12

+0

@Dirk只关闭?你想提取它? – vks 2014-12-04 14:17:49