正则表达式匹配中的固定字符数

时间:2015-04-09 01:29:08

标签: regex regex-negation regex-lookarounds

有没有办法通过正则表达式匹配固定长度字符串中的固定数量的字符?

示例,我想匹配字符串长度为5的所有字符串,并且正好有3个字母和2个感叹号(!)。感叹号可以在字符串中的任何位置。

示例匹配:abc !!,a!b!c,!! abc,a !! bc

我尝试使用前瞻匹配,但我无法限制长度。以下是我使用的正则表达式。

(?=\w*!\w*!\w*)[\w!]{5}

匹配!!! b和!!!!我也不想要。

2 个答案:

答案 0 :(得分:3)

您可以使用基于前瞻性的正则表达式来执行此操作。

^(?=(?:\w*!){2}\w*$)[\w!]{5}$

Live Demo

答案 1 :(得分:1)

可能最容易指定所有可能性。

(?=\w\w\w!!|\w\w\!\w\!|\w\w\!!\w|\w!\w\w!|\w!\w!\w|\w!!\w\w|!\w!\w\w|!!\w\w\w)

正则表达式在组合/排列方面效果不佳。

如果组合的数量太大,请在第一个正则表达式收集潜在匹配且第二个(以及更高版本)继续验证它的部分中进行。

[\w!]{5}
match.count('!') == 2
match.count('\w') == 3

(这不是有效的代码 - 只是一个概念)