具有不同字符数的正则表达式

我需要创建一个正则表达式来验证字符串。字符串只能包含几个字符,每个字符只能重复几次。

正则表达式应检查以下条件。

  1. 字符串只能包含a,b,c,d,e作为字符。

  2. 字符“ a ”最多可以出现2次。

  3. 字符“ b ”最多可以出现3次。

  4. 字符“ c ”最多可以出现3次。

  5. 字符“ d ”最多可以出现1次。

  6. 字符“ e ”最多可以出现1次。

我知道这可以通过字符串函数来实现。但是我正在尝试使用正则表达式。

对此,我们将给予任何帮助。


炎炎设计
浏览 187回答 3
3回答

人到中年有点甜

可以通过以下方式构造检查多个条件的正则表达式:^ -源字符串的开始。针对任何“必需”条件的一系列正查询。针对任何“禁止”条件的一系列否定查询。.+ -如果以前的所有查找均成功,则匹配整个(通常是非空的)源字符串。如果正向或负向查找都指向位于源字符串中任意位置的char ,则应以开头.*,说明在我们实际检查之前,可以出现任意数量的任何(其他)char,可能没有。您的案例实际上仅包含“禁止”条件,说明不允许这样做:(?!.*[^a-e])-除以外的任何字符a-e。(?!(?:.*a){3})-a发生3次(或更多)。(?!(?:.*b){4})-b发生4次(或更多)。(?!(?:.*c){4})-c发生4次(或更多)。(?!(?:.*d){2})-d发生2次(或更多)。(?!(?:.*e){2})-e发生2次(或更多)。因此整个正则表达式应为:^(?!.*[^a-e])(?!(?:.*a){3})(?!(?:.*b){4})(?!(?:.*c){4})(?!(?:.*d){2})(?!(?:.*e){2}).+

一只甜甜圈

如果您的字符串已经排序,就像所有a字符都已经在所有b字符之前,依此类推,则像这样的简单正则表达式将执行以下操作:r'^a{0,2}b{0,3}c{0,3}d{0,1}e{0,1}$'如果字符串中的字符未排序,那么,请先对它们进行排序=)如果你的“可以出现最多的2倍”的意思是1〜2次(不为0,1或2,如我所料),替换所有0与1在reg.expression。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python