我需要创建一个正则表达式来验证字符串。字符串只能包含几个字符,每个字符只能重复几次。正则表达式应检查以下条件。字符串只能包含a,b,c,d,e作为字符。字符“ a ”最多可以出现2次。字符“ b ”最多可以出现3次。字符“ c ”最多可以出现3次。字符“ d ”最多可以出现1次。字符“ e ”最多可以出现1次。我知道这可以通过字符串函数来实现。但是我正在尝试使用正则表达式。对此,我们将给予任何帮助。
3 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
可以通过以下方式构造检查多个条件的正则表达式:
^
-源字符串的开始。针对任何“必需”条件的一系列正查询。
针对任何“禁止”条件的一系列否定查询。
.+
-如果以前的所有查找均成功,则匹配整个(通常是非空的)源字符串。
如果正向或负向查找都指向位于源字符串中任意位置的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}).+
一只甜甜圈
TA贡献1836条经验 获得超5个赞
如果您的字符串已经排序,就像所有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。
添加回答
举报
0/150
提交
取消