正则表达式会找到XXX(如果存在),但也不会找到Y

时间:2018-10-16 12:04:44

标签: regex regex-negation

我希望有一个正则表达式来查找包含“好答案”的每个字符串,但是如果该字符串还包含一个问号(“?”),则不是这样。

我相信该语言为Ruby(用于interpersonal.stackexchange.com上的ips comment bot)。

到目前为止,我的正则表达式看起来像这样:

((?!\?)(.*?))good\Wanswer((.*?)(?!\?))$

根本无法工作...

我也有这个版本,可以处理一些我想要的字符串(但是检测到太多的东西):

good\Wanswer(((?!\?).)*$)

这是我要检测的字符串:

  

一个很好的答案!

_

  

(除此之外,这是一个非常好的答案,我对此表示赞同。)

_

  

好答案DVD!

_

  

dsds很好的答案cfds

_

  

这是一个很好的答案,但我认为它确实在OP的手中发挥了作用。您说了他们想听的内容-他们不应该自由共享信息,因为这就像孩子在作作业一样在作弊。这与本网站的精神背道而驰,我不确定向同事收取费用以向您学习以工作为基础的东西不会使他们的老板遇到麻烦。想象一下,如果有医生要求与其他医生商量以帮助患者,他们就彼此共享的信息相互收费。他们会被开除。


这是我不想检测到的

  

感谢您的好回答! (我赞成)但是,我仍然不明白为什么我不应该说我相信什么?那是什么问题...

_

  

cxvd好的答案? zedfs

_

  

ezdds?好的答案dsf dsf

_

  

sdsd? dsfdsf?好答案!

_

  

嗨,问题是“ 如何告诉blabla X是我的好朋友”,您介意更多关于 OP在何时应执行的操作的详细信息吗? OP仍想与双方成为朋友?另外,请花一些时间阅读“ How do I write a good answer

_

  

请注意,这是指向“ How do I write a good answer?

的链接

_

  

嗨,这听起来对我来说是一个很好的答案,但是我只有一个问题:在成功使用该技术之前,您处于类似情况的何处?在这里最好以个人经验来备份您的答案(如果需要,这里是How to write a good answer的指南)

此外,如果您不想区分大小写,请成为我的客人

1 个答案:

答案 0 :(得分:2)

您的机器人在Ruby上运行,您可以使用正则表达式,例如

(?i)^(?![^?]*\?).*good\s+answer

或者,如果您对多行输入运行正则表达式,并且不想跨行溢出

(?i)^(?![^?\n]*\?).*good +answer

请参见the regex demo

正则表达式详细信息

  • (?i)-不区分大小写的修饰符
  • ^-一行的开头
  • (?![^?]*\?)-除?以外的任何0个以上的字符之后,不允许?
  • .*-任意0个以上的字符,并且尽可能多
  • good\s+answer-good,1个以上的空格,answer