我正在尝试检查某个级别是否有效。 级别的形式如下:(但他们还有998个)
bbbbbbb
b41111b
b81400b
b81010b
b01121b
b08001b
bbbbbbb
关卡必须遵循一些规则。我写了一个正则表达式,以符合所有规则,但一个: 级别必须包含1次2和1次4。 (注意在上面的级别中有两个4和一个2.上面的级别无效。)
这是一个学校项目,请指导我完成答案。 提前谢谢。
编辑:
我现在的正则表达式是:
^b{' + str(length) + r'}\n(b{1}[0-8]{' + str(length - 2) + r'}b{1}\n)+b{' + str(length) + '}$
对于上述级别,长度= 7 请注意,它甚至没有尝试过滤上面这个错误的级别。 其他规则是:
上面我的正则表达式确实考虑了规则1和规则2,但我仍需要弄清楚规则3和规则4.
我已经尝试过等等,无法弄明白。
答案 0 :(得分:0)
好吧,正好1 a
的正则表达式是[^a]*a[^a]*
(也就是说,非a
的可能是空的序列,后跟a,然后是可能的非a
的空序列。我会留下一个练习如何处理多行&确保这涵盖整个层面。
对于1 a
和1 b
:[^ab]*((a[^ab]*b)|(b[^ab]*a))[^ab]*
,请注意相同。说明:一个非a或b的序列,遵循EITHER 1)a,一个非a或b的运行,ab或2)ab,一个非a或b的运行和一个a,然后是一个非a-or-b的运行。
答案 1 :(得分:0)
答案是使用负向预测来锚定输入开始。
目前还不清楚你要匹配什么,所以我只会使用占位符<your-regex>
来表示当前的正则表达式:
^(?!.*?2.*?2)(?!.*?4.*?4)<your-regex>
查看live demo的正确拒绝超过1“2”的内容。
答案 2 :(得分:0)
这是符合您所有条件的正则表达式:
^b(?!(?:[^2]*2){2,})(?!(?:[^4]*4){2,})[b0-8]*b$
^b
和$b
[b0-8]*
(?!(?:[^2]*2){2,})
(?!(?:[^4]*4){2,})