正则表达式匹配中的固定字符数
fixed number of characters in a regex match
有没有办法通过正则表达式匹配固定长度字符串中固定数量的字符?
例如,我想匹配字符串长度为 5 且恰好有 3 个字母和 2 个感叹号 (!) 的所有字符串。感叹号可以在字符串中的任何位置。
匹配示例:abc!!、a!b!c、!!abc、a!!bc
我尝试使用先行匹配,但无法限制长度。以下是我使用的正则表达式。
(?=\w*!\w*!\w*)[\w!]{5}
这匹配 a!!!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)
正则表达式不适用于 combinations/permutations。
如果组合的数量太多,请在第一个正则表达式收集潜在匹配项,第二个(及以后)继续验证它的部分进行。
[\w!]{5}
match.count('!') == 2
match.count('\w') == 3
(这不是有效代码 -- 只是一个概念)
您可以使用基于前瞻的正则表达式来执行此操作。
^(?=(?:\w*!){2}\w*$)[\w!]{5}$
有没有办法通过正则表达式匹配固定长度字符串中固定数量的字符?
例如,我想匹配字符串长度为 5 且恰好有 3 个字母和 2 个感叹号 (!) 的所有字符串。感叹号可以在字符串中的任何位置。
匹配示例:abc!!、a!b!c、!!abc、a!!bc
我尝试使用先行匹配,但无法限制长度。以下是我使用的正则表达式。
(?=\w*!\w*!\w*)[\w!]{5}
这匹配 a!!!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)
正则表达式不适用于 combinations/permutations。
如果组合的数量太多,请在第一个正则表达式收集潜在匹配项,第二个(及以后)继续验证它的部分进行。
[\w!]{5}
match.count('!') == 2
match.count('\w') == 3
(这不是有效代码 -- 只是一个概念)
您可以使用基于前瞻的正则表达式来执行此操作。
^(?=(?:\w*!){2}\w*$)[\w!]{5}$