找'字'后面没有'@'

use*_*026 27 regex

搜索word未跟随@符号的字符串的正则表达式是什么?

例如:

mywordLLD         OK
myword.dff        OK
myword@ld         Exclude
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 50

这里需要(?!@)负面的预测:

word(?!@)
Run Code Online (Sandbox Code Playgroud)

演示

这个正则表达式匹配wordsubstring并(?!@)确保@它之后没有,如果它在那里,word则不会返回匹配(即匹配失败).

来自Regular-expressions.info:

如果你想要匹配其他东西不匹配的东西,那么否定的先行是必不可少的.在解释字符类时,本教程解释了为什么不能使用否定字符类来匹配a q后跟a u.否定前瞻提供了解决方案:q(?!u).负前瞻构造是一对括号,左括号后跟一个问号和一个感叹号.

Character classes页面上:

重要的是要记住,否定的字符类仍然必须与字符匹配.q[^u]并不意味着:"一个q没有跟着u".这意味着:"a q后跟一个不是u" 的角色.它q与字符串中的不匹配Iraq.在伊拉克是一个国家q之后,它确实与之相匹配q.确实:空间成为整体匹配的一部分,因为它是"不是一个u"的字符,与上面的正则表达式中的否定字符类相匹配.如果你想让正则表达式匹配两个字符串中的,q只有q,那么你需要使用负向前瞻:q(?!u).

  • 对于 R 用户,请务必将 `perl = TRUE` 添加到您的命令中,例如 `gsub("word(?!@)", "", obj, perl = TRUE)`。否则它会抛出错误“无效的正则表达式”。 (2认同)
  • @xwhitelight你只是没有看对地方,请参阅[为什么在R中使用lookbehinds的正则表达式无效?](/sf/ask/939427401/ r 中无效)。在 POSIX 正则表达式风格中,根本不支持前瞻,因此不能在 `sed` 或 `awk` 中使用 `(?!...)` 或 `(?=...)`,也不能与 `grep` 一起使用` 除非您使用 `-P` 选项。RE2 也不支持前瞻(因此,Go、Google Docs/Sheets REGEX* 函数会受到影响)。Oracle 正则表达式也不支持前瞻。 (2认同)