【问题标题】:Match words not beginning with certain character匹配不以特定字符开头的单词
【发布时间】:2019-05-24 18:34:34
【问题描述】:

我正在尝试从文本中标记和替换不以 # 开头的单词。文本文件如下所示:

Some words #word #anotherword #etc
Some more words #words #anotherword #etc #etc more words here
No words containing that character in this line
Etc

应该匹配什么:

Some words 
Some more words                           more words here
No words containing that character in this line
Etc

我对正则表达式完全陌生,并且一直在尝试提出正确的代码。我得到的最接近的是标记除#之外的所有文本,而不是附加到它的单词。 # 后面的部分不应该被选中。注意:特殊字符和数字也存在,需要标记,但#后面的不能。我如何以最简单的方式完成此任务?

【问题讨论】:

  • 我怀疑你想删除除匹配项之外的所有文本,对吧?然后使用(#\S+)|(?s).(或\B(#\S+)|(?s).)并替换为(?1$1\n)
  • (?<!#)\b\w+ 匹配前面没有# 的单词,这是你想要的吗?
  • @Wiktor Stribiżew:不幸的是,这两个代码都选择了整个文本。
  • 什么意思?分享上述文本的预期输出
  • @Toto - 它有效!但由于某种原因,特殊字符不匹配。例如: - 一些词。 “-”不匹配。

标签: regex notepad++


【解决方案1】:

你可以使用

(?<!\S)[^\s#]\S*

详情

  • (?&lt;!\S) - 空白字符或字符串开头必须位于当前位置之前
  • [^\s#] - 任何字符,但空格和 #
  • \S* - 任何 0+ 个非空白字符。

the regex demo

【讨论】:

    最近更新 更多