문자열이 패턴과 일치하는지 확인


317

문자열이이 패턴과 일치하는지 어떻게 확인합니까?

대문자, 숫자, 대문자, 숫자 ...

예를 들면 다음과 같습니다.

A1B2
B10L1
C1N200J1

이것들은 그렇지 않습니다 ( '^'는 문제를 지적합니다)

a1B2
^
A10B
   ^
AB400
^

3
왜 문제인지 더 자세히 설명해 주시겠습니까?
John Woo

4
^([A-Z]\d+){1,}$이처럼?
통행인 September

세 번째 예에서 문제는와 관련이 B있고 그렇지 않아야합니다 A.
Burhan Khalid

아마도 문제의 오타 일 수 있습니다. 모두 AB소문자가 맞아? A10b그리고 aB400?
John Woo

@Burhan, 문제는 A와 관련이 있습니다. B는 옆에 숫자가 있고 A는 없습니다.
DanielTA

답변:


465
import re
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(string)

편집 : 주석에서 언급했듯이 match문자열의 시작 부분에서만 일치하는 항목 만 확인하고 문자열의 re.search()어느 곳에서나 패턴과 일치합니다. ( https://docs.python.org/library/re.html#search-vs-match 참조 )


20
의 문서에서 re.match: If zero or more characters at the beginning of string match the regular expression pattern. 나는 문자열의 끝에 무언가를 일치시킬 수없는 이유를 이해하려고 30 분을 보냈습니다. 에서 불가능한 것 같습니다 match. 이를 위해, re.search(pattern, my_string)하지만 작동합니다.
conradkleinespel

2
@conradk 네, 맞습니다 . ^처음 사용할 때 묵시적이라고 생각 합니다 match. 나는 그것이 매우 간단한 설명보다 조금 더 복잡하다고 생각하지만 명확하지 않습니다. 문자열의 처음부터 시작하는 것이 맞습니다.
CrazyCasta

173

짧막 한 농담: re.match(r"pattern", string) # No need to compile

import re
>>> if re.match(r"hello[0-9]+", 'hello1'):
...     print('Yes')
... 
Yes

bool필요에 따라 평가할 수 있습니다

>>> bool(re.match(r"hello[0-9]+", 'hello1'))
True

import re첫 번째 줄로 누락
arod

이상 하네. re.match의 맥락에서 왜 사용할 수 if있지만 bool다른 곳 에서 사용하는 경우 사용해야 합니까?
LondonRob

16
조심하십시오 re.match. 문자열의 시작 부분에서만 일치합니다. re.search대신 살펴보십시오 .
LondonRob

if일치하지 않는지 확인하기 때문에 @LondonRob None.
Dennis

잘못된 문자 범위 오류와 같은 정규식에 오류가 없는지 확인하기 위해 컴파일해야 할 부분이
많음

36

다음을 시도하십시오 :

import re

name = ["A1B1", "djdd", "B2C4", "C2H2", "jdoi","1A4V"]

# Match names.
for element in name:
     m = re.match("(^[A-Z]\d[A-Z]\d)", element)
     if m:
        print(m.groups())

1
이것은 그룹을 얻는 데 필요한 일치 항목을 반환하는 유일한 경우입니다. 내 의견으로는 가장 좋은 답변입니다.
Rick Smith

24
import re
import sys

prog = re.compile('([A-Z]\d+)+')

while True:
  line = sys.stdin.readline()
  if not line: break

  if prog.match(line):
    print 'matched'
  else:
    print 'not matched'

7

정규식은 이것을 쉽게 만듭니다 ...

[A-Z] A와 Z 사이의 정확히 하나의 문자와 일치합니다

\d+ 하나 이상의 숫자와 일치합니다

() 물건을 그룹화 (그리고 물건을 반환하지만 지금은 그룹화를 생각하십시오)

+ 1 이상을 선택


6
  
import re

ab = re.compile("^([A-Z]{1}[0-9]{1})+$")
ab.match(string)
  


대문자, 숫자 패턴으로 작동해야한다고 생각합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.