【问题标题】:Regex to match specific keyword(s) AND 10 digit number in any order正则表达式以任何顺序匹配特定关键字和 10 位数字
【发布时间】:2016-06-07 13:22:38
【问题描述】:

当 acct、account 或 loan(不区分大小写)位于 10 位数字之前的任何位置时,我们得到了匹配的正则表达式,但我们需要找到匹配的关键字是在 10 位数字之前还是之后.

\b(?i)(account|acct|loan)[\S\s]*\b\d{10}\b

例子:

帐户 0123456789 - 应该匹配
0123456789 帐户 - 应该匹配
贷款 0123456789 - 应该匹配

会计 0123456789 - 不应匹配
帐户 0123456789123 - 不应匹配

我们仅在存在特定关键字AND 10 位数字时寻找匹配项。

【问题讨论】:

  • 请添加示例输入和输出。
  • 帐户 0123456789 - 应该触发匹配
  • 还有:0123456789账号
  • 来吧...将它们正确添加到问题中,不要指望您寻求帮助的人会从 cmets 收集必要的信息。

标签: regex


【解决方案1】:

使用前瞻/后瞻。实际上,我最近发现了如何做到这一点。

(?=.*\b(acc(oun)?t|loan)\b)(?=.*\b(\d{10})\b)

【讨论】:

  • 对我来说效果很好。
  • @mikeyq6 什么? See demo ..!或者对我的问题有误解。
  • 它匹配演示中的两种情况。它只是没有突出显示它们,因为该数字没有捕获组。我想我会成功的。
  • @RamenChef 您的示例在关键字和 10 位数字之间有任意数量的空格或其他单词时有效,但在引入回车时无效。我怎么能解释这些?
  • 除非您在 JavaScript 的垃圾正则表达式引擎中,否则您应该能够添加 s 修饰符以使 .s 匹配换行符。如果您使用 JavaScript,则可以将.s 替换为[^]s。
【解决方案2】:

您可以将其展开为 2 个单独的匹配组,即:

/(account|acct|loan)[\S\s]*\d{10}$|\d{10}[\S\s]*(account|acct|loan)$/gim

|之前的前半部分与数字前的单词匹配第一个大小写,后半部分与数字后的单词匹配第二个大小写

在此处查看演示: https://regex101.com/r/nY5gN4/9

【讨论】:

  • 使用您的链接,它对我来说非常有效。不过,它只会匹配两种可能性中的“一种”。如果您删除或更改其中一个“帐户”字词,它将与另一个相匹配。你是说你需要分别匹配两者吗?你的问题不是很清楚
  • 我想我明白你的意思了。我已经更新了我的答案。
  • 感谢所有信息!要回答您的问题...是的,我们需要匹配任何一个关键字以及一个 10 位数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2013-09-27
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多