首页 > 解决方案 > 正则表达式的字符串是带有最小长度为 6 的数字的大写字母,以及带有最小长度为 6 的数字和连字符且只有数字的大写字母

问题描述

目前我有这个正则表达式:

(?:\d+[A-Z]|[A-Z]+\d)[A-Z-\d]{6,}|[0-A9-Z]{6,}|[0-9]{6,}

我希望这个正则表达式匹配段落中的任何“字符串”:

带数字和最小长度 6 的大写字母

带有连字符和最小长度 6 的数字的大写字母

只有最小长度为 6 的数字。

上面的这个正则表达式有效,但是它仍然只匹配字母,我想如何排除这个?

A1A1A1A1A1A1A1A1 --> should match
12222222222222DE --> should match
'PRODUKT', 'PRODUKT', 'NICKNAME', 'PRODUKTNAME' --> shouldn't match any of this but its matching
123456 --> should match
6203-5458 --> shouldn't match
234SS-4NNNAA --> should match

标签: pythonregexrefindall

解决方案


您可以使用

(?<![\dA-Z-])(?=[\dA-Z-]{6,})(?:[\d-]+[A-Z]|[A-Z-]+\d)[A-Z\d-]*|[0-9]{6,}

请参阅正则表达式演示详情

  • (?<![\dA-Z-])- 紧靠左边,不应有数字、大写字母或-
  • (?=[\dA-Z-]{6,})- 紧靠右边,必须有 6 个或更多数字、大写字母或-
  • (?:[\d-]+[A-Z]|[A-Z-]+\d)[A-Z\d-]*- 一个或多个数字或-然后是一个大写字母或一个或多个大写字母或连字符,然后是一个数字,然后是零个或多个大写字母、数字或连字符
  • |- 或者
  • [0-9]{6,}- 六位数或更多位数。

推荐阅读