繁体   English   中英

Python 正则表达式 - 带有 [AZ] 和 DIGITS [\\d] 的字符串

[英]Python Regex - STRING with [A-Z] and DIGITS [\d]

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)

我一直在搜索字符串([AZ] 和数字)。 我在这里搜索了类似的问题 - 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 :- 今天你的评论和回答都教会了我很好 - 我非常感激 - 我会在某个时候回复并让你知道我是否想支持你的回答 - 非常感谢。

您可以通过将量化移动到前瞻性和一些...

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

它有点复杂,但可以正常工作。

[^\\d\\n]匹配除数字或换行符以外的任何内容。 使正前瞻匹配这个构造任意次数( * ),后面跟着一个数字,然后重复2-4次,最后接着非数字/ LF再次,使得只有当它包含之间匹配的字符串2 位和 4 位数字。

在 regex101 上看到它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM