【问题标题】:Negative look-ahead to exclude specific set of strings and allow all others负前瞻以排除特定字符串集并允许所有其他字符串
【发布时间】:2022-06-14 03:13:43
【问题描述】:

我正在搜索大量包含各种负错误代码的文本日志文件,大多数是 4 位数字,前面有一个减号,例如-3304-3315 等。我想排除一小部分这些错误代码同时允许所有其他错误代码匹配。

我尝试使用来自this answer的改编:

 "^/(?!-3301|-3304|-3306|-3308|-3309)(-[0-9]{4})"

排除 -3301, -3304, -3306, -3308, -3309 但匹配所有其他 4 位负字符串。 我知道文件集中有匹配项,例如-3220,但它们不匹配。

在这次消极展望的尝试中我错过了什么?

【问题讨论】:

  • 大概,你想要-(?!330[14689])\d{4}(?!\d)
  • @WiktorStribiżew - 刚刚打开了它。如果您有兴趣,请在答案中放置?顺便说一句,\d 是否等同于 [0-9]

标签: regex


【解决方案1】:

在数字匹配模式之前有一些 / 字符,它不应该是负数的一部分。此外,您只在字符串的开头匹配^

请注意,您使用该模式匹配超过 4 位数字,您需要在右侧有一个数字边界。

你可以使用

-(?!330[14689])\d{4}(?!\d)

详情

  • - - 一个连字符
  • (?!330[14689]) - 在右边,应该没有330,然后是来自14689 的数字集
  • \d{4} - 四位数
  • (?!\d) - 右边不允许有数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2016-12-16
    • 2022-10-14
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多