【问题标题】:regex to ignore string ends with specific pattern正则表达式忽略以特定模式结尾的字符串
【发布时间】:2021-05-06 07:46:19
【问题描述】:

我正在尝试编写正则表达式,它应该忽略任何以 _numbers 结尾的字符串,例如 (_1234)

如下图

abc_def_1234 - should not match
abc_fgh - match
abc_ghj -  match
abc_ijk_2345 - not match

我正在尝试使用如下所示的前瞻正则表达式,但它匹配所有内容。有人可以帮助我如何实现这一目标吗?

\w+(?!_\d+)

【问题讨论】:

  • 请解释为什么abc_fgh 应该匹配但abc_ghj 不应该匹配。它们看起来像是对我来说是相同类型输入的示例。
  • @Bohemian 抱歉打错了,编辑了我的帖子
  • 提示:\w 等于:[a-zA-Z0-9_] 所以它也匹配数字和下划线——不是你想要的。

标签: regex regex-look-ahead


【解决方案1】:

匹配由下划线分隔的单词,但使用否定前瞻来排除包含不需要的尾部的输入:

^(?!.*_\d+$)\w+(?<!_)$

live demo

后面的最后一个外观(您可以删除)要求最后一个字符不是下划线 - 即输入是 AFAICT 格式正确。

【讨论】:

  • 下划线是\w 的一部分,所以最后一个parantese 是不必要的。
  • @PoulBak 好点。我已经更正了这一点以保持我的初衷。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2013-10-27
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多