Python 如何创建具有多个条件的正则表达式?

Python 如何创建具有多个条件的正则表达式?,python,regex,Python,Regex,如果要匹配以字母开头,后跟一个或两个数字的字符串,可以执行以下操作: import re re.match("^[A-Z][0-9]{1,2}$" 然而,就我而言,我还有两个条件: 如果字母后面有0,则必须有第二个数字,因此E01可以,不允许E0 如果字母后面有0,则不能有第二个0,因此不允许使用E00 我们可以用一个正则表达式来描述这一点吗?我认为这可能是一个解决方案 re.match('[A-Z](?:0[1-9]|[1-9][0-9]?)$', 'A09')

如果要匹配以字母开头,后跟一个或两个数字的字符串,可以执行以下操作:

import re

re.match("^[A-Z][0-9]{1,2}$"
然而,就我而言,我还有两个条件:

  • 如果字母后面有0,则必须有第二个数字,因此
    E01
    可以,不允许
    E0
  • 如果字母后面有0,则不能有第二个0,因此不允许使用
    E00

我们可以用一个正则表达式来描述这一点吗?

我认为这可能是一个解决方案

re.match('[A-Z](?:0[1-9]|[1-9][0-9]?)$', 'A09')

通过对条件使用单个断言
(?!.00?$)
来避免问题
然后匹配普通字母加上1或2个数字
\d{1,2}

这分散了验证的责任

^(?!.00?$)[A-Z]\d{1,2}$
请注意,
(?!.00?$)
仅在结尾处有1或2个数字时进行验证,
将不仅仅是0或00。
[A-Z]\d{1,2}
验证字母加上将结尾限制为1或2个数字。

它们一起同步validashun。

这里是python中的简单解决方案:

pattern = r"^[A-Z]{1}([0]{1}[1-9]{1})|([1-9]{1}[0-9]{1})$"
text = 'E01'
is_match = re.match(pattern, text) is not None
你可以做:

^(?:[A-Z]0[1-9]|[A-Z][1-9]|[A-Z][1-9][0-9])$

我想,它几乎也适用于
'A100'
,但只允许两个数字。@Cleb我做了一个修改,通过将
$
添加到正则表达式的末尾来纠正这种情况。这似乎很管用,很好!向上投票;我将等待接受,以防出现其他内容…@Ivar字符串的开头,
^
,匹配不需要指示符-它要求匹配从字符串的开头开始。(我错误地认为它需要结束,但它没有结束,所以需要
$
)。如果使用
搜索
,则匹配的开始可能在字符串中的任何位置,
搜索
将需要
^
从开始处开始。对于我测试的所有情况(向上投票),似乎都能很好地工作。请你详细解释一下好吗?当然可以,加上总数explaning@Cleb如果没有
,负前瞻将测试字符串
^00?$
是否不存在,前瞻将从字符串的开头开始,以便只检查字符串
00
0
是否不是完整的字符串。您需要
来表示字符串的第一个字符。@Cleb我也在仔细地遍历正则表达式。由于第二个0后面的
(这使得第二个0成为可选的),它在一个0和两个0时失败。@Cleb更正了我之前(已删除)的评论<代码>重新匹配(“[A-Z](?!00?$)\d{1,2}$”,“A01”)请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。