Python正则表达式 - 带[A-Z]和DIGITS [\ d]的STRING

时间:2017-10-25 11:23:51

标签: python regex

import re 

 str_1 = "ABABABABABAabababaacdcdcdcd"
 str_2 = "ABABABABAB1ab2babaacdcdcdcd"
 str_3 = "123456A"
 str_4 = "123456"

 #str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{10,}',str_2).group(0)
 str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{2,4}',str_2).group(0)
 print(str_3Plus_d)

 #str_3plus_a = re.search(r'(?=.*?\d)(?=.*?[A-Z])[A-Z\d]{3,}',str_4).group(0)

 #str_3plus_both = re.search(r'(?=.*?\d)(?=.*?[A-Z])[A-Z\d]{3,}',str_4).group(0)

我很难找到一个STRING([A-Z]和DIGITS)。我搜索了类似的问题,在这里 - https://stackoverflow.com/a/28334645/4928635,它说(?=。*?\ d)“检查至少一位数”,但这似乎不是案件。如 -

所示
str_3Plus_d = re.search(r'(?=.*?\d)[A-Z\d]{2,4}',str_2).group(0)
print(str_3Plus_d)
它打印出一个字符串 - 没有数字?在我的JupyterNotebook中打印的字符串如下所示 -

 ABAB

如何捕获字符串 - “可变数量的字符和至少2位数,最多4位数,作为示例 - 如何捕获 - AAABBB2223”......

进一步澄清 -

  1. @ pm-2ring: - 数字和字母字符可以按任何顺序出现,我尝试捕获的子字符串的长度可能不同。

  2. @ jean-françois-fabre: - 你似乎已经删除了你的答案 - 你提供的代码正是你所说的那样 - 谢谢。

  3. @clasg: - 你的评论和答案今天都教会我很好 - 我非常感激 - 我会在某个时候回复并让你知道我是否想要提出你的答案 - 非常感谢。

1 个答案:

答案 0 :(得分:0)

你可以通过将量化转移到前瞻和一些......

来实现
^(?=(?:[^\d\n]*\d){2,4}[^\d\n]*$)[A-Z\d]*$

它有点复杂,但应该按照它应该做的工作。

[^\d\n]匹配除数字或换行符之外的任何内容。进行正向前瞻匹配这个构造任意次(*),然后是数字,然后重复这个 2-4次,最后是非数字/ LF再次,使它只匹配一个字符串,如果它包含2到4位数字。

See it here at regex101