【发布时间】:2018-12-23 19:52:01
【问题描述】:
我刚刚开始使用 python 的正则表达式部分,我以为我理解了这个概念,但是当我开始编程时,我无法理解它。给出的问题陈述是设计一个
- 必须至少包含 2 个大写英文字母字符
- 必须至少包含 3 位数字 (0-9)
- 它应该只包含字母数字字符
- 字符不得重复
- 必须正好有 10 个字符
我写的代码是
import re
n=int(input())
patt=r'^(?=.*[A-Z]).{2,}(?=.*[0-9]).{3,}(?=.*[\w]?){10}$'
for x in range(n):
match=re.findall(patt,str(input()))
#print(match)
if match:
print("Valid")
else:
print("Invalid")
我首先从第一部分开始,即应该包含“它必须包含至少 2 个大写英文字母字符”,我为此写了(?=.*[A-Z]).{2,},因为它将搜索两个以上的字符并且将使用前瞻断言
对于第二部分,我应用了相同的内容,对于第三部分,即 它应该只包含字母数字字符 我应用了 (?=.*[\w]?) 这三个似乎有效,但是当第四和第五个条件出现时,即 否字符应该重复和必须正好有10个字符我最后尝试使用{10},但它不起作用,现在整个事情似乎都坏了。谁能指导我如何使用正则表达式以及什么是积极的前瞻性。
【问题讨论】:
-
No character should repeat 表示字符串中任何位置的任何字符都应匹配,例如“B1CD102354”根据上述条件是无效字符串,因为这里 1 重复了两次。
-
你有没有从 HackerRank Validating UID 问题中提出问题?
标签: python regex python-3.x