为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2021-03-31 17:15:14
我需要创建一个正则表达式来验证字符串。字符串只能包含几个字符,每个字符只能重复几次。正则表达式应检查以下条件。字符串只能包含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}).+


查看完整回答
反对 回复 2021-04-20
?
一只甜甜圈

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,如我所料),替换所有01在reg.expression。


查看完整回答
反对 回复 2021-04-20
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信