首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex负查找,匹配一个单词,只要不放在其他单词前面

Regex负查找,匹配一个单词,只要不放在其他单词前面
EN

Stack Overflow用户
提问于 2020-08-10 16:47:45
回答 2查看 244关注 0票数 2

我正在尝试创建一个简单的正则表达式,在这里我需要捕获所有的Dogs事件,只要它前面没有其他单词Cats。下面是一些测试正则表达式的示例:

  1. 我的狗狗很高兴->应该匹配(前面是有效的" My“)
  2. 狗是人类最好的朋友->应该匹配(第一个词,它前面没有任何东西)
  3. 这是无效的猫狗->不应该匹配(前面有一个无效的单词猫)
  4. 狗和猫,狗和狗的->应该匹配(找到多个“狗”,没有一个前面有“猫”)
  5. TomCats狗是有效的->应该匹配(TomCats本身是一个与猫不同的词)

我正在尝试一个类似于此的正则表达式:

代码语言:javascript
复制
((?<!\bCats\b)\s*\bDogs\b)

这不能给出正确的结果(它匹配所有的情况,当它不应该匹配第三种情况)

另外,如果我使用类似的东西:

代码语言:javascript
复制
((?<!\bCats\b)\s+\bDogs\b)

它返回案例1和3的正确结果,但与案例2不匹配,因为Dogs是在开头找到的,并且前面没有空格。

在这里,区分大小写不是一个问题。我正在使用Java来测试这个正则表达式

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-10 17:34:38

如果我清楚地理解了您的需求,那么您可以使用这个正则表达式进行负前瞻性,而不是向后看:

代码语言:javascript
复制
^(?!.*\bCats\s+Dogs\b).*?\bDogs\b

RegEx演示

RegEx详细信息:

  • ^:开始
  • (?!.*\bCats\s+Dogs\b):如果我们发现单词Cats后面跟着1+空格,然后是word Dogs anywhere,则会导致匹配失败。
  • .*?\bDogs\b:在0或多个字符后匹配单词Dogs
票数 2
EN

Stack Overflow用户

发布于 2020-08-10 17:04:50

你离解决方案很近。我认为这个准则应该有效:

代码语言:javascript
复制
(?<!Cats)\s+Dogs|^.{0,4}Dogs
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63344485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档