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

Regex 正则表达式匹配中的固定字符数,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,有没有办法通过正则表达式匹配固定长度字符串中固定数量的字符 例如,我想匹配所有字符串,其中字符串长度为5,并且正好有3个字母和2个感叹号(!)。感叹号可以在字符串中的任何位置 示例匹配:abc!!,A.BCabc,a!!卑诗省 我尝试使用“前瞻”进行匹配,但无法限制长度。下面是我使用的正则表达式 (?=\w*!\w*!\w*)[\w!]{5} 这是一个很好的搭配!!!b和a!!!!还有我不想要的 指定所有可能性可能是最简单的 (?=\w\w\w!!|\w\w\!\w\!|\w\w\!!\w|\

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

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

示例匹配:abc!!,A.BCabc,a!!卑诗省

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

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

这是一个很好的搭配!!!b和a!!!!还有我不想要的

指定所有可能性可能是最简单的

(?=\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

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

您可以使用基于前瞻的正则表达式来实现这一点

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

为什么不呢?但通过这种方法,您是否认为当您可以使用一个简单的非捕获组(带有锚)时,需要进行前瞻。对于第二种方法,您只需要计算
因为你可以推断出其他字符的数量。第一,我只是取了原始的正则表达式并修改了它。对于第二种情况,是的,对于这种情况。正如我所说,这只是一个例子。