Regex 正则表达式以任意顺序匹配特定关键字和10位数字

Regex 正则表达式以任意顺序匹配特定关键字和10位数字,regex,Regex,我们有一个正则表达式,当acct、account或loan(不区分大小写)位于10位数字之前时匹配,但我们需要查找关键字是否位于10位数字之前或之后的匹配项 \b(?i)(account|acct|loan)[\S\s]*\b\d{10}\b 示例: 账户0123456789-应匹配 0123456789账户-应匹配 贷款0123456789-应匹配 会计0123456789-不应匹配 账户0123456789123-不应匹配 我们只在特定关键字和10位数出现时才查找匹配项。您可以将其扩展为两

我们有一个正则表达式,当acct、account或loan(不区分大小写)位于10位数字之前时匹配,但我们需要查找关键字是否位于10位数字之前或之后的匹配项

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

账户0123456789-应匹配
0123456789账户-应匹配
贷款0123456789-应匹配

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


我们只在特定关键字和10位数出现时才查找匹配项。

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

/(account|acct|loan)[\S\s]*\d{10}$|\d{10}[\S\s]*(account|acct|loan)$/gim
其中,
|
前面的前半部分将第一个大小写与数字前面的单词匹配,第二部分将第二个大小写与数字后面的单词匹配

请参见此处的演示:

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

/(account|acct|loan)[\S\s]*\d{10}$|\d{10}[\S\s]*(account|acct|loan)$/gim
其中,
|
前面的前半部分将第一个大小写与数字前面的单词匹配,第二部分将第二个大小写与数字后面的单词匹配

请参见此处的演示:
使用lookaheads/lookbehinds。事实上,我最近发现了如何做到这一点

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

使用lookaheads/lookbehinds。事实上,我最近发现了如何做到这一点

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


对我来说很好。@mikeyq6什么。。!或者我对这个问题有误解。它与演示中的两种情况都匹配。它只是没有突出显示它们,因为没有一个号码的捕获组。我想我会让它成为一个。@RamenChef您的示例在关键字和10位数字之间有任意数量的空格或其他单词时有效,但在引入回车时无效。我如何解释这些呢?除非您使用JavaScript的垃圾正则表达式引擎,否则您应该能够添加一个
s
修饰符以使
s匹配换行符。如果您使用JavaScript,您可以将
替换为
[^]
s。对我来说效果很好。@mikeyq6什么。。!或者我对这个问题有误解。它与演示中的两种情况都匹配。它只是没有突出显示它们,因为没有一个号码的捕获组。我想我会让它成为一个。@RamenChef您的示例在关键字和10位数字之间有任意数量的空格或其他单词时有效,但在引入回车时无效。我如何解释这些呢?除非您使用JavaScript的垃圾正则表达式引擎,否则您应该能够添加一个
s
修饰符以使
s匹配换行符。如果您使用JavaScript,您可以将
s替换为
[^]
s。使用您的链接,它非常适合我。不过,它只能匹配两种可能性中的“一种”。如果您删除或更改其中一个“account”单词,它将与另一个匹配。你是说你需要分别匹配两者吗?你的问题不太清楚,我想我明白你的意思了。我已经更新了我的答案。谢谢所有的信息!要回答你的问题…是的,我们需要有任何一个关键字匹配,以及一个10位数的数字。使用你的链接,它的工作非常适合我。不过,它只能匹配两种可能性中的“一种”。如果您删除或更改其中一个“account”单词,它将与另一个匹配。你是说你需要分别匹配两者吗?你的问题不太清楚,我想我明白你的意思了。我已经更新了我的答案。谢谢所有的信息!要回答您的问题…是的,我们需要匹配任何一个关键字以及10位数字。请添加示例输入和输出。帐户0123456789-应触发匹配以及:0123456789帐户加油。。。将它们正确地添加到问题中,不要期望您寻求帮助的人从评论中收集必要的信息。请添加示例输入和输出。帐户0123456789-应触发匹配以及:0123456789帐户加油。。。将它们适当地添加到问题中,不要期望您寻求帮助的人从评论中收集必要的信息。