장고 정규표현식

정은경·2021년 3월 23일
0

Regular Expression

  • 일정한 규칙(패턴)을 가진 문자열을 표현하는 방법

파이썬 re 모듈의 함수들

1> re.match('찾을 문자열 패턴', '대상 문장열')

>>> import re
>>>
>>> re.match('Hello', 'Hello world')
<re.Match object; span=(0, 5), match='Hello'>
>>>
  • 매치하는 패턴이 있으면 'SRE_Match' 객체 반환, 없으면 아무것도 반환안함
>>> import re
>>>
>>> re.match('hello|world', 'hello')
<re.Match object; span=(0, 5), match='hello'>
>>>
  • 여러 문자열 패턴들 중 일치하는 것이 있는 지 체크
    • 문자열|문자열
    • 문자열|문자열|문자열|문자열

2> re.search('찾을 문자열 패턴', '대상 문장열')

  • ^문자열 => 특정 문자열로 시작
  • 문자열$ => 특정 문자열로 끝
>>> import re
>>>
>>> re.search('^Hello', 'Hello world!')
<re.Match object; span=(0, 5), match='Hello'>
>>>
>>> re.search('world!', 'Hello world!')
<re.Match object; span=(6, 12), match='world!'>
>>>

2. 장고필터 정규표현식

In [16]: RegionDaily.objects.filter(nm__iregex=r'stage').values()
Out[16]: <QuerySet [{'id': 133081879, 'cd': 31160, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 133081880, 'cd': 31170, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 133081881, 'cd': 31180, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 133081882, 'cd': 31191, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 133081883, 'cd': 31200, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 133081884, 'cd': 31210, 'nm': 'growth.stage.kiwifruit', 'tm': datetime.date(2020, 10, 23), 'value': 0.0}, {'id': 237292816, 'cd': 37030, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292817, 'cd': 37040, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292818, 'cd': 37050, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292819, 'cd': 37060, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 6.0}, {'id': 237292820, 'cd': 37070, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292821, 'cd': 37080, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292822, 'cd': 37090, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292823, 'cd': 37100, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292824, 'cd': 37310, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292825, 'cd': 37320, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292826, 'cd': 37330, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292827, 'cd': 37340, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292828, 'cd': 37350, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, {'id': 237292829, 'cd': 37360, 'nm': 'growth.stage.pear.early', 'tm': datetime.date(2020, 6, 25), 'value': 7.0}, '...(remaining elements truncated)...']>
  • regex와 iregex를 쓰려면 파이썬 정규표현식 모듈 "re"를 import 해야한다

1) regex

  • 대소문자 고려

2) iregex

  • 대소문자 고려하지 않음

import re
from 모델이소속된앱이름.models import 모델이름
모델이름.objects.filter(필드이름__iregex=r'(일치되어야하는문자열)$').all()

Reference

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글