Python Regex Matching 6 characters with least one letter & one number [duplicate]

Nov 07 2020

일치해야하는 이메일에 생성 된 코드가 있습니다. 길이는 항상 6 자이며 최소 하나의 숫자와 하나의 문자를 포함해야합니다. 숫자와 문자의 순서는 매번 다릅니다. 나는 정규식을 처음 접했습니다.

다음은 이메일 본문에서 가져와야하는 코드의 몇 가지 예입니다.

q295zp
gd5z9r
ktsft5
mz3jr4

나는 이것들과 무수히 많은 것을 시도했지만 위의 코드와 6 글자 단어를 계속 일치시킵니다.

[a-z1-9]{6}

([a-z]+[1-9]+){6}

적어도 하나의 문자와 하나의 숫자가있는 6 개의 문자 시퀀스 만 일치 시키려면 어떻게해야합니까?

답변

3 PedroRodrigues Nov 07 2020 at 02:01

이것은 정규식에 너무 적합하지 않고 실제 파이썬에서는 너무 간단해서 전자도 시도하지 않습니다.

def f(string):
    digits = sum(map(str.isdigit, string))
    alphas = sum(map(str.isalpha, string))
    return len(string) == 6 and digits >= 1 and alphas >= 1

truthy_suite = [
    'q295zp',
    'gd5z9r',
    'ktsft5',
    'mz3jr4',
]

falsy_suite = [
    'qwerty',
    '123456',
]

for test in truthy_suite:
    assert f(test)

for test in falsy_suite:
    assert not f(test)

colab.google.com에서 확인하세요.

2 RavinderSingh13 Nov 07 2020 at 02:27

다음을 시도해 주시겠습니까? 링크에서 작성 및 테스트https://regex101.com/r/tux72m/2

^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z\d]{6}$

설명:

  • ^(?=.*\d): 처음부터 확인하고 ?=앞을보고 일치하는 숫자.
  • (?=.*[a-zA-Z]): 미리보기를 사용하여 1 개의 소문자 / 대문자를 확인합니다.
  • [a-zA-Z\d]{6}$: 시작부터 끝까지 문자 (소문자 / 대문자) 또는 숫자의 숫자와 일치해야합니다 6.
1 TeshanShanukaJ Nov 07 2020 at 02:41

완료를 위해 다음을 사용하지 않는 또 다른 방법이 있습니다. re

def match(s):
    return any(_s.isalpha() for _s in s) and any(_s.isdigit() for _s in s)

정확히 6 자리 숫자를 원하면

def match(s):
    return len(s) == 6 and any(_s.isalpha() for _s in s) and any(_s.isdigit() for _s in s)