gpt4 book ai didi

regex - 遇到问题识别数字模式

转载 作者:行者123 更新时间:2023-12-01 01:24:11 24 4
gpt4 key购买 nike

我是 RegEx 的新手,在尝试检测模式时遇到了一些困难。

我想识别一个介于 4000-4999 之间的数字,但同时不能在另一个数字的前面或后面加上一个可选字符(空格或连字符“-”)。

例如:4567(匹配)

我有4999朵玫瑰(火柴)

1234567 天过去了(没有匹配)

我的供水账号是123 4567 89(不匹配)

你好,我的手机号码是123-4567-89(不匹配)

我尝试了以下模式

(?<!(\d))\b4\d{3}\b(?!(\d))

但它仍然给我匹配 123 4567 - 我想\b 有什么特别之处?

任何建议将不胜感激。

谢谢,埃里克

最佳答案

你可以使用

(?<!\d[\s-]|\d)4\d{3}(?![\s-]?\d)

在 .NET、JavaScript ECMAScript 2018 兼容环境或 PyPi 正则表达式中,lookbehinds 模式可以包含 ?*+{min,} 量词,您可以将其缩短为

(?<!\d[\s-]?)4\d{3}(?![\s-]?\d)

或者,如果不支持不同长度的交替(如在 Boost 或 Python 中),请使用

(?<!\d[\s-])(?<!\d)4\d{3}(?![\s-]?\d)

请参阅 regex demoregex demo 2(以及一个 .NET regex demo)。

详情

  • (?<!\d[\s-]|\d)/(?<!\d[\s-]?)/(?<!\d[\s-])(?<!\d) - 没有数字和空格/- 不允许紧邻当前位置左侧的数字
  • 4\d{3} - 4 和任何 3 位数字
  • (?![\s-]?\d) - 紧靠右侧,不允许出现 1 次或 0 次后跟数字的空格/-

注意 上面的解决方案不依赖于单词边界,甚至可以在下划线之间和粘在单词上时进行匹配。如果你真的想避免这种情况,那么你需要通过各种方式使用单词边界,例如(?<!\d[\s-]|\d)\b4\d{3}\b(?![\s-]?\d) .

关于regex - 遇到问题识别数字模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51297067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com