【问题标题】:Regex to only match substring A when substring B was not found正则表达式仅在未找到子字符串 B 时匹配子字符串 A
【发布时间】:2015-02-02 10:05:09
【问题描述】:

这似乎已经被问过很多次了,但我找不到任何可以解决我的具体要求的答案。

输入字符串如下:

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

只有当单词lane 不是输入字符串的一部分时,什么正则表达式才匹配单词closed?这应该尽可能笼统

  • lane 一词可以存在于 closed 一词之前或之后,
  • 任何数量和类型的词都可以位于laneclosed 之间,而不仅仅是上面示例中使用的ais

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

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

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

正则表达式风格是 Python 3.4。

【问题讨论】:

标签: python regex regex-lookarounds


【解决方案1】:
^(?!.*\blane\b)(?=.*\bclosed\b).*$

试试这个。查看演示。

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

【讨论】:

  • 这是一个不错的解决方案。
  • 酷!你是否也知道如何让它只匹配单词closed 而不是整个字符串?
  • @Dirk 只关闭?你要提取它吗?
  • 嗯,不,匹配完整的行似乎足以完成我的任务。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2011-11-08
  • 2022-01-17
  • 1970-01-01
  • 2013-04-13
  • 2022-07-11
相关资源
最近更新 更多