【问题标题】:Regex - exclude word within string [duplicate]正则表达式 - 排除字符串中的单词 [重复]
【发布时间】:2025-12-25 03:40:16
【问题描述】:

我想在这个字符串中匹配除“eps1@”之外的所有内容:

HelpMe_pleas3_eps1@

我尝试了[^eps1@],但这匹配了除了“e”“p”“s”“1”“@”的每个实例之外的所有内容。我只想排除“eps1@”。

【问题讨论】:

  • 试试:[^(eps1@)]
  • 嘿 Nir ​​- 感谢您的回复。不幸的是,我得到了相同的结果 - 它不只排除 eps1@

标签: regex string-matching


【解决方案1】:

有很多方法可以做到这一点,具体取决于您的实际需要。

使用(.*)eps1@ 可以匹配第一个捕获组中“eps1@”之前的所有内容。见demo #1

使用(.*)eps1@(.*) 可以匹配第一个和第二个捕获组中“eps1@”之前和之后的所有内容。见demo #2

如果 "eps1@" 出现多次,你可以使用这个正则表达式:

(?:[^eps1@]|e(?!ps1@)|(?<!e)p(?!s1@)|(?<!ep)s(?!1@)|(?<!eps)1(?!@)|(?<!eps1)@)+

这意味着:

  • [^eps1@] 除“e”、“p”、“s”、“1”和“@”之外的任何字符;或
  • e(?!ps1@) 如果后面没有“ps1@”,则为字符“e”;或
  • (?&lt;!e)p(?!s1@) 如果前面没有“e”且后面没有“s1@”,则为字符“p”;或
  • 等等。

demo #3

但是您是否考虑过在源字符串中将“eps1@”替换为“”?

附:对于接下来的问题,我建议您更准确地了解您使用的语言。

【讨论】:

  • 谢谢!!对不起,我不清楚。最终,我希望能够提取/匹配“HelpMe_please3_”,以便可以将“eps1!@”替换为其他内容。我可以通过使用(.*)[^eps1@] 来实现这一点。
最近更新 更多