세 자릿수마다 쉼표를 찍는 숫자와 일치하는 정규식을 만드시오.

정규식은 다음과 일치 해야 됩니다.

  • '42'
  • '1,234'
  • '6,368,745'
다음과는 일치 하면 안됩니다.
  • '12,34,567'
  • '1234'

mo = regex.search('42')
if mo:
    print(mo.group())

mo = regex.search('1,234')
if mo:
    print(mo.group())

mo = regex.search('6,368,745')
if mo:
    print(mo.group())

mo = regex.search('12,34,567')
if mo:
    print(mo.group())

mo = regex.search('1234')
if mo:
    print(mo.group())
_M#]



성이 Sayonara인 어떤 사람의 전체 이름과 일치하는 정규식을 만드시오.

정규식은 다음과 일치해야 됩니다.

  • 'Satoshi Sayonara'
  • 'Alice Sayonara'
  • 'RoboCop Sayonara'
다음과는 일치 하면 안됩니다.
  • 'satoshi Sayonara'     (이름의 첫 글자가 대문자가 아니기 때문에)
  • 'Mr. Sayonara'           (앞에 있는 단어에 문자가 아닌 기호가 있기 때문에)
  • 'Sayonara'                 (이름이 없기 때문에)
  • 'Satoshi sayonara'     (sayonara의 첫 글자가 대문자가 아니기 때문에)


첫 번째 단어는 Alice, Bob, Carol이며, 두 번째 단어는 eats, pets, throws이고, 세 번째 단어는 apples, cats, baseballs이어야 한다. 또한 문장은 마침표로 끝나야 한다. 이정규식은 대소문자를 구분하지 않는다.

일치해야 되는 문장.
  • 'Alice eats apples.'
  • 'Bob pets cats.'
  • 'Carol throws baseballs.'
  • 'Alice throws Apples.'
  • 'BOB EATS CATS.'
일치 해서 안되는 문장.
  • 'RoboCop eats apples.'
  • 'ALICE THROWS FOOTBALLS.'
  • 'Carol eats 7 cats.'


전달 받은 암호 문자열이 보안 면에서 강력한지는 확인하기 위해서 정규표현식을 사용해보도록 합시다.
강력한 암호의 기준은 최소 8글자에서 15글자이고, 대소문자와 소문자를 모두 포함하며, 적어도 하나의 숫자를 가지고 있는 것을 기준으로 합니다.



마지막으로 참고자료로 사용하기 좋은 사이트를 소개한다. ( 사실 이분이 더 정리를 잘 하셔서 포스팅한 의미가 퇴색되고 있다 )

http://sweeper.egloos.com/3064293

http://sweeper.egloos.com/3064431

http://sweeper.egloos.com/3064464

http://sweeper.egloos.com/3064600

http://egloos.zum.com/sweeper/v/3064687

http://sweeper.egloos.com/3064730

http://sweeper.egloos.com/3064808


예제 참고용.

http://gocoding.tistory.com/93

'프로그래밍 > Python' 카테고리의 다른 글

정규표현식 예제  (0) 2017.11.21
정규 표현식  (0) 2017.11.20

정규 표현식의 예제들을 풀어가면서 보도록 하겠습니다. ( 모든 예제는 python3에서 테스트 하였습니다. )


import re

Regularexpression = re.compile(r'\d+\s\w+')


print(Regularexpression.findall('1 일, 2 이, 3 삼, 4 사, 5 오, 11 십일')


결과값

['1 일', '2 이', '3 삼', '4 사', '5 오', '11 십일']

해당 정규 표현식은 하나 또는 그 보다 많은 숫자 글자 (\d+), 그 다음에 공백 문자 (\s), 그다음에는 하나 또는 그보다 많은 문자,숫자,밑줄 글자(w+)를 가진 텍스트를 찾습니다.



import re

regex = re.compile(r'[낭만코더]')

print(regex.findall('낭만 만두 코딩 더럽다 부대찌개 지지'))


결과값

['낭', '만', '만', '코', '더']

다음 정규식은 사용자 정의 정규식으로 [] (대괄호) 안에 문자를 정의하면 각각의 모음과 일치한다. 예문에서는 한글로 되어 있기 때문에 한글의 한글자와 매칭하는 글들을 찾아 주기 때문에 결과값이 저런식으로 호출 되는 것을 알 수 있습니다. 영문으로 되는건 직접 해보시기 바랍니다.



import re

regex = re.compile(r'[^낭만코더]')

print(regex.findall('낭만 만두 코딩 더럽다 부대찌개 지지'))


결과값

[' ', '두', ' ', '딩', ' ', '럽', '다', ' ', '부', '대', '찌', '개', ' ', '지', '지']

사용자 정규식 한에 캐럿문자(^)를 두면 부정형 문자 클래스. 즉, 해당하는 반대의 ( 문자 클래스에 없는 모든 문자와 ) 모든 문자와 일치 하기 때문에 공백 문자도 포함됩니다. 따라서 해당 결과값이 발생합니다.



import re

regex = re.compile(r'^낭만')

print(regex.findall('낭만코더, 코더낭만, 만낭만낭, 테테테테낭만')


결과값

['낭만']

위 정규 표현식은 검색 텍스트의 시작 부분에서 일치하는 텍스트를 나타내는 것이다. "낭만"이라는 단어로 시작되는 텍스트에서 낭만만 뽑아내기 때문에 결과값이 저렇게 나왔습니다. 반대로 문자열이 정규식 패턴으로 끝나야 한다는 것을 하기 위해서는 $ 기호를 붙이면 됩니다. 그 부분은 직접 해보시길 바랍니다.


추가적으로 낭만 이라는 글자만 결과값에 출력되지 않고 한 문장 예를들면 낭만으로 시작되는 정규 표현식에 결과값은 "낭만코더" 이런식으로 검색되게 하기 위해서는 어떻게 해야 될지, 또 낭만이라는 글자가 끝에 오는 단어들은 어떻게 출력 시킬 수 있을지는 고민해 보시길 바랍니다.



정규식에서 .글자(점)는 와일드카드라고 하며 줄바꿈을 제외한 모든 문자와 일치합니다.

import re

regex = re.compile(r'.만')

print(regex.findall('낭만코더, 두만, 원만, 천만, 태만, 포만')


결과값

['낭만', '두만', '원만', '천만', '태만', '포만']


모든 것을 일치 시킬 필요가 있는 경우도 있습니다.

import re

regex = re.compile(r'First Name: (.*) Last Name: (.*)')

mo = regex.search('First Name: 낭만 Last Name: 코더')

print(mo.group(1))

print(mo.group(2))


결과값

낭만

코더



정규식은 그냥 많이 써보면서 삽질 해보는게 가장 많이 늘 것 같네요....

'프로그래밍 > Python' 카테고리의 다른 글

정규표현식 예제2  (0) 2017.11.22
정규 표현식  (0) 2017.11.20

+ Recent posts