以“\ d +”正则表达式模式排除一组特定数字

时间:2012-09-21 13:54:20

标签: regex

假设我有一些字符串:

some50
some51/x
some52/y
some53/z
some510
some511/x
some512/y
some513/z

我想测试我的字符串是否为some +数字+任何内容。

我在这个要求中使用了模式:^some\d+,它将返回所有匹配项。

现在我要求排除一些数字。例如,我必须从比赛中排除51和52。什么是正确的表达?

我已经尝试过(比我承认的更多猜测):

  • ^some(\d+|(?!(51|52)))
  • ^some((\d+)(?!(51|52)))
  • ^some(\d+)^(?!(51|52)))
  • ^some(\d+)(?!(51|52)))

但它们都没有返回预期的结果,即:

some50
some53/z
some510
some511/x
some512/y
some513/z

PS:不知道是否重要,但是在PowerShell脚本中使用了正则表达式。

[编辑] 扩展问题以显示不应排除51x

2 个答案:

答案 0 :(得分:4)

您正在寻找负面的前瞻断言。我不熟悉PowerShell脚本,但在perl兼容的正则表达式中,这有效:

^some(?!(51$|52$))\d+$

这也与some510不匹配。如果不是这样,请在$51后删除52

更新:从字符串边界更改为字边界(在字符串的末尾)

^some(?!(51\b|52\b))\d+\b

答案 1 :(得分:-1)

这是一种方式,可能不是最优雅的方式: ^some([0-46-9]\d*|5([03-9]|\d\d+)|5)