2014. 2. 4. 21:32
  • .(점)은 어떤 문자이건 하나의 문자를 가리킨다. (new line 제외)
  • \w 는 대소문자와 밑줄을 포함하는 모든 영숫자 [a-zA-Z0-9_]를 가리킨다.
  • \s 는 space, tab 등 white space 를 가리킨다. (\S 는 non-whitespace)
  • + 는 1개 또는 그 이상을 가리킨다.
  • * 는 0 개 또는 그 이상을 가리킨다.
  • ? 는 0 개 또는 1 개를 가리킨다.
  • \ 는 특수문자를 표현하는 용도로 사용되지만, 특수문자앞에서는 특수문자의 사용을 제외하고 문자자체를 나타내도록 한다.


>>> import re                                              # re 모듈 import


>>> match = re.search('iig', 'called piig');     # search 를 이용하여 iig 문자열 검색

>>> match.group()                                      # search 결과 match object 의 group 함수 이용

'iig'

>>> type(match)                                         # search 의 return 형이 match object 임

<type '_sre.SRE_Match'>

>>> match

<_sre.SRE_Match object at 0x2b26d13dcbf8>


>>> match = re.search('igs', 'called piig');    # 없는 문자열 검색

>>> match.group()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'NoneType' object has no attribute 'group'

>>> type(match)                                         # 검색 후 return 형을 확인해보니 NoneType

<type 'NoneType'>                                      # 이는 검색 결과가 없다는 것임.


>>> match = re.search('..g', 'called piig');     # . 은 하나의 문자를 가리킴. 즉 앞에 아무문자나

>>> match.group()                                      # 두문자가 온 후 그 다음 문자가  g 인 것을 검색

'iig'


>>> match = re.search('i..g', 'called piig');    # i 와 g 사이에 문자 두개가 있는 것을 검색

>>> match.group()                                      # 결과가 없는 것임. NoneType

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'NoneType' object has no attribute 'group'


>>> match = re.search('p..g', 'called piig');           # p 와 g 사이 문자 두개

>>> match.group()

'piig'


>>> match = re.search('a.c', 'a.c called piig');      # a 와 c 사이에 한문자가 있는 문자열 검색

>>> match.group()

'a.c'


>>> match = re.search('a\.c', 'a.c called piig');   # a 와 c 사이 .(점) 문자가 있는 문자열 검색

>>> match.group()

'a.c'


>>> match = re.search('a.c', 'abc called piig');     # a 와 c 사이에 한문자가 있는 문자열 검색

>>> match.group()

'abc'


>>> match = re.search('a\.c', 'abc called piig');   # a.c 라는 문자열 검색 (\. 은 . 문자)

>>> match.group()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'NoneType' object has no attribute 'group'


>>> match = re.search(':\w\w', 'abc called :piig');  # : 문자 뒤에 두개의 아무문자나

>>> match.group()

':pi'


>>> match = re.search(':[\w]+', 'abc called :piig');  # : 문자뒤에 아무문자나 1 개 이상 붙은것

>>> match.group()

':piig'


>>> match = re.search('(\d\d\d)-(\w\w\w)', '123-abc');  # 2 개의 pattern group 검색

>>> match.groups()                               # 결과로 리턴된 group 을 tuple 로 묶어서 보여줌.

('123', 'abc')

>>> match.group()                                 # 결과 리턴된 각 group 의 string 을 연결해서 보여줌

'123-abc'

>>> match.group(0)                                # 0 번째 group 은 없고 match.group() 과 같은 결과

'123-abc'

>>> match.group(1)                                # 첫번째 group (element)을 string 으로 리턴

'123'

>>> match.group(2)                                # 두번째 group (element)을 string 으로 리턴

'abc'


>>> match = re.search('(ab)','ab');          # 하나의 pattern group 만으로 검색

>>> match.groups()                                # tuple 의 element 는 하나임

('ab',)

>>> match.group(1)

'ab'

>>> match.group(2)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

IndexError: no such group


>>> match = re.search('(aaa).(bbb)@(cc.)', '  aaa.bbb@ccx');  # 3 개의 group 검색

>>> match.groups()

('aaa', 'bbb', 'ccx')


>>> m = re.search('([\w.]+)@([\w.]+)', 'blah dp.lee.dp.lee@gmail.com yyxdf @ aa@xx')

>>> m.groups()

('dp.lee.dp.lee', 'gmail.com')

>>> m.group(1)

'dp.lee.dp.lee'

>>> m.group(2)

'gmail.com'


>>> import re

>>> bool(re.match('[0-9]', '    77'))                     # 첫 문자가 안맞으면 false

False

>>> bool(re.search('[0-9]', '    77'))                   # 문자열 전체 검색이므로 있으면 true

True


>>> m = re.findall('([\w.]+)@([\w.]+)', 'blah dp.leedp.lee@gmail.com yyxdf @ aa.xx@xx.net')

>>> m.groups()                                                 # 결과는 match object 가 아니기 때문에

Traceback (most recent call last):                        # groups 나 group 같은 함수가 없음.

  File "<stdin>", line 1, in <module>

AttributeError: 'list' object has no attribute 'groups'

>>> m.group()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'list' object has no attribute 'group'


>>> m

[('dp.leedp.lee', 'gmail.com'), ('aa.xx', 'xx.net')]  # 결과는 각 pattern group 결과(tuple)가

                                                                         # List 로 묶여진 것임.

                                                                         # 이후 m 은 List 연산들을 자유롭게 수행.


>>> m = re.search('AA', '  aa bb cc')                    # default option 으로 사용하면

>>> m.group()                                                     # 대소문자 구분해서 아무것도 못찾음

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: 'NoneType' object has no attribute 'group'


>>> m = re.search('AA', '  aa bb cc', re.I)            # re.I 옵션을 사용하니 대소문자 미구분

>>> m.group()                                                    # case-insensitive 라고 하죠.

'aa'

Posted by k1rha