正则表达式中{}表示法的OR条件

时间:2019-03-25 06:32:39

标签: python regex

我有一个正则表达式:

((?:4903|4905|4911|4936|6333|6759)[0-9]{12}|(?:4903|4905|4911|4936|6333|6759)[0-9]{14}))

您会注意到,在(?:4903|4905|4911|4936|6333|6759)[0-9]中的4位数字之后,我需要12位数字或14位数字。等于[0-9]{12|14}的条件。

有没有办法做到这一点?让我知道是否需要进一步澄清。

1 个答案:

答案 0 :(得分:2)

为什么不只是'[0-9]{12}($|[0-9]{2}$)'

>>> regex = re.compile('[0-9]{12}($|[0-9]{2}$)')
>>> for i in range(11, 15):
...     print(f'Match for string of length {i}: {re.match(regex, "0" * i) is not None}')
... 
Match for string of length 11: False
Match for string of length 12: True
Match for string of length 13: False
Match for string of length 14: True

如果您希望匹配未在字符串末尾终止的14位数字,则需要将'$'令牌替换为其他内容,例如'?'