【问题标题】:Regex: match a word in a string but only when line doesn't contain a slash正则表达式:匹配字符串中的单词,但仅当行不包含斜杠时
【发布时间】:2017-04-07 14:16:50
【问题描述】:

我想匹配字符串中的一个单词,但前提是字符串不包含//

示例:匹配单词books

这应该匹配:

I read books.

这不应该匹配。

// I read books.

为了匹配这个词,我创建了这个正则表达式:

(?<=.)books(?=\s*)

但是如何忽略包含// 的字符串?

其他信息:

  • // 总是在我想匹配的单词前面。

  • // 并不总是在字符串的开头。领导 空格是可能的。

  • 我想匹配这个词,以便在下一步中替换它。

  • 我想在 Visual Studio 2013 的 Replace in Files 功能中使用它。

感谢您的努力。

【问题讨论】:

  • ^ *//.*text 将匹配任何带有单词 'text' 并以 // 开头的字符串。 ^ 将匹配:行首
  • 可以做到,但不能用于仅匹配"This is a book // another book" 的第一个"book" 的边缘情况。这种情况可以消除吗?即是否知道该词仅在任何给定行中出现(可能多次)在// 之前或之后?
  • @KMS:我删除了我的 cmets,如果你愿意,可以取消删除你的。
  • @WiktorStribiżew 我做了
  • 我的意思是取消删除你的答案

标签: regex string


【解决方案1】:

WiktorStribiżew 在评论中写下了我的问题的解决方案。

解决办法:(?<!//.*?)(books|spoons|shelves)

【讨论】:

  • 啊,我明白了。允许可变长度的负回溯。真可惜,我有一个没有它们的解决方案。 ^(?:[^\/]*(?:\/(?!\/))|)*[^\/]*(books)。有了他们@Wiktors 的回答当然更有效率。
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 1970-01-01
  • 2019-08-26
相关资源
最近更新 更多