首页 > 解决方案 > 正则表达式中 {} 符号的 OR 条件

问题描述

我有一个正则表达式:

((?: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]I 中的 4 位数字之后,要么需要 12 位数字,要么需要 14 位数字。等价于 的条件[0-9]{12|14}

有没有办法做到这一点?让我知道是否需要更多说明。

标签: pythonregex

解决方案


为什么不只是'[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 位数字,则需要将'$'标记替换为其他内容,例如'?'.


推荐阅读