Regex 2位数字只允许一次(正则表达式)
我正在检查某个级别是否有效。 级别是形式:(但他们比这多了998个) 级别必须遵循一些规则。我编写了一个正则表达式,以符合除一条规则外的所有规则: 级别必须正好包含1乘以2和1乘以4。 (注意上面的级别有两个4和一个2。上面的级别无效。) 这是一个学校项目,请引导我找到答案。 提前谢谢 编辑: 我现在的正则表达式是:Regex 2位数字只允许一次(正则表达式),regex,unix,Regex,Unix,我正在检查某个级别是否有效。 级别是形式:(但他们比这多了998个) 级别必须遵循一些规则。我编写了一个正则表达式,以符合除一条规则外的所有规则: 级别必须正好包含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) +
^b{' + str(length) + r'}\n(b{1}[0-8]{' + str(length - 2) + r'}b{1}\n)+b{' + str(length) + '}$
对于上述标高,长度=7
请注意,它甚至没有尝试过滤上面的错误级别。
其他规则包括:
我试过lookarounds之类的东西,都没办法弄明白。好吧,一个正则表达式正好代表1
a
就是[^a]*a[^a]*
(也就是说,一个可能是空的非a
,后跟一个a,后跟一个可能是空的非a
)。我将把它留给一个如何处理多行的练习&确保它涵盖整个级别
对于1
a
和1b
:[^ab]*((a[^ab]*b)|(b[^ab]*a))[^ab]*
,具有相同的注意事项。说明:一系列非a或b,后跟1)a、非a或b、a或b,或2)a b、非a或b、a,后跟非a或b。答案是使用锚定到输入开头的负面外观
不清楚您要匹配什么,因此我将为您当前的正则表达式使用占位符
:
^(?!.*?2.*?2)(?!.*?4.*?4)<your-regex>
^(?!*?2.*?2)(?!*?4.*?4)
请参阅rhis正确拒绝超过1“2”的正则表达式。这是符合所有条件的正则表达式:
^b(?!(?:[^2]*2){2,})(?!(?:[^4]*4){2,})[b0-8]*b$
- 它以b开头和结尾,使用
和^b
$b
- 它仅由字母b和数字0-8组成,由
[b0-8]*
- 使用
(?!(?:[^2]*2){2,})将不允许超过一位数字2
- 使用
(?!(?:[^4]*4){2,})将不允许超过一位数字4
*?
,它将消耗尽可能少的输入来匹配-因此*
不会跳过一个“2”,这会破坏意图(与贪婪的量词*
,它不起作用相反),我已经尝试并想到了这一点。但问题是,我需要对2个字符(2和4)执行此操作,这会使事情变得复杂。“BBBBBBBBBBB0000000000000B b0233333303400b B0111111110B b0000000000000b BBBBBBBBB”是一个有效的级别,但您的正则表达式无法获取它。这是不正确的。我的正则表达式抓取了他们所有人,看了现场演示:我应该提到的。我在Python中工作,这有什么区别吗?这没有任何区别,因为Python也支持lookaheads。这并不要求第一行和最后一行完全由b组成,b是。虽然没有明确说明,但似乎需要。应该很容易修复。
^b(?!(?:[^2]*2){2,})(?!(?:[^4]*4){2,})[b0-8]*b$