【问题标题】:Regex Match ONLY after x or more were found仅在找到 x 或更多之后的正则表达式匹配
【发布时间】:2012-02-15 20:23:23
【问题描述】:

我有一个社会安全号码的正则表达式。我有一个新要求,规定正则表达式应该只在识别出 5 个或更多时“匹配”。我已经尝试了几种排列,但我无法弄清楚这一点。

我的正则表达式: ((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4}))

我试过了 ((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4})){5,}

这不起作用。有什么我想念的吗?

【问题讨论】:

  • 当您说“匹配”时,您的意思是您希望它在“匹配”之前找到五个唯一的 SSN?对于捏造的数据,您能否提供一个可以使用的示例?
  • 与@hexparrot 相同的 q 加上:如果是,这听起来更像是一个软件功能而不是正则表达式模式。
  • 5 个或更多 SSN?所以你想在一个文本块/行中包含 5 个有效的 SSN?您可以这样做,但迭代 n 行文本的更简单表达式会更简单。 ...平行嘘的评论。

标签: regex


【解决方案1】:

您的模式似乎也不允许在 SSN 之间使用任何分隔符。当我测试它时(使用查找两次重复的版本),它适用于333 33 3333444 44 4444 之类的输入,但如果 SSN 之间有换行符/制表符/空格/等,它就不起作用。您可能需要将允许的分隔符列表添加到模式的末尾(可能后跟 ?* 字符,因为列表中的最后一个 SSN 可能不以一个结尾)。

例如,如果您的 SSN 之间有逗号和可能的空格,则您的模式的修订版本可能是

((?!000|666|9\d{2})([0-8]\d{2}[- ]\d{2}[- ]\d{4})[, ]*){5,}

【讨论】:

  • 我们正在使用 .NET Regex 引擎,它看起来确实不太可能按照我的意愿去做。 5 个或更多 SSN 可以位于正在搜索的内容中的任何位置。例如一个文本文档,如果找到 5 个或更多匹配项则显示,否则忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 2020-10-16
  • 1970-01-01
相关资源
最近更新 更多