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”......
进一步澄清 -
@ pm-2ring: - 数字和字母字符可以按任何顺序出现,我尝试捕获的子字符串的长度可能不同。
@ jean-françois-fabre: - 你似乎已经删除了你的答案 - 你提供的代码正是你所说的那样 - 谢谢。
@clasg: - 你的评论和答案今天都教会我很好 - 我非常感激 - 我会在某个时候回复并让你知道我是否想要提出你的答案 - 非常感谢。
答案 0 :(得分:0)
你可以通过将量化转移到前瞻和一些......
来实现^(?=(?:[^\d\n]*\d){2,4}[^\d\n]*$)[A-Z\d]*$
它有点复杂,但应该按照它应该做的工作。
[^\d\n]
匹配除数字或换行符之外的任何内容。进行正向前瞻匹配这个构造任意次(*
),然后是数字,然后重复这个 2-4次,最后是非数字/ LF再次,使它只匹配一个字符串,如果它包含2到4位数字。