산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 정규식

파이썬 정규식

이 자습서에서는 정규식(RegEx)에 대해 배우고 Python의 re 모듈을 사용하여 RegEx로 작업합니다(예제를 통해).

등록 ular pression(RegEx)은 검색 패턴을 정의하는 일련의 문자입니다. 예를 들어,

^a...s$

위의 코드는 RegEx 패턴을 정의합니다. 패턴은 다음과 같습니다. a로 시작하는 5자리 문자열 s로 끝나는 .

RegEx를 사용하여 정의된 패턴을 사용하여 문자열과 일치시킬 수 있습니다.

표현식 문자열 일치합니까?
^a...s$ abs 일치하지 않음
alias 일치
abyss 일치
Alias 일치하지 않음
An abacus 일치하지 않음
<시간>

Python에는 re라는 모듈이 있습니다. RegEx와 함께 작동합니다. 다음은 예입니다.

import re

pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)

if result:
  print("Search successful.")
else:
  print("Search unsuccessful.")	

여기에서는 re.match()을 사용했습니다. 패턴 검색 기능 test_string 내 . 이 메서드는 검색에 성공하면 일치 개체를 반환합니다. 그렇지 않으면 None를 반환합니다. .

<시간>

re에 정의된 다른 여러 기능이 있습니다. RegEx와 함께 작동하는 모듈. 알아보기 전에 정규식 자체에 대해 알아보겠습니다.

RegEx의 기본 사항을 이미 알고 있다면 Python RegEx로 이동하십시오.

<시간>

RegEx를 사용하여 패턴 지정

정규식을 지정하기 위해 메타 문자가 사용됩니다. 위의 예에서 ^$ 메타 문자입니다.

<시간>

메타 문자

메타 문자는 RegEx 엔진에 의해 특별한 방식으로 해석되는 문자입니다. 다음은 메타 문자 목록입니다.

[] . ^ $ * + ? {} () \ |

<시간>

[] - 대괄호

대괄호는 일치시킬 문자 집합을 지정합니다.

표현식 문자열 일치합니까?
[abc] a 1 경기
ac 2경기
Hey Jude 일치하지 않음
abc de ca 5경기

여기 [abc] 일치시키려는 문자열에 a , b 또는 c .

-를 사용하여 문자 범위를 지정할 수도 있습니다. 대괄호 안에.

캐럿 ^를 사용하여 문자 세트를 보완(반전)할 수 있습니다. 대괄호 시작 부분의 기호.

<시간>

. - 기간

마침표는 모든 단일 문자와 일치합니다(줄 바꿈 '\n' 제외). ).

표현식 문자열 일치합니까?
.. a 일치하지 않음
ac 1 경기
acd 1 경기
acde 2개 일치(4자 포함)
<시간>

^ - 캐럿

캐럿 기호 ^ 문자열이 다음으로 시작하는지 확인하는 데 사용됩니다. 특정 캐릭터.

표현식 문자열 일치합니까?
^a a 1 경기
abc 1 경기
bac 일치하지 않음
^ab abc 1 경기
acb 일치하지 않음(a로 시작) 그러나 뒤에 b이 오지 않음 )
<시간>

$ - 달러

달러 기호 $ 문자열이 로 끝나는지 확인하는 데 사용됩니다. 특정 캐릭터.

표현식 문자열 일치합니까?
a$ a 1 경기
formula 1 경기
cab 일치하지 않음
<시간>

* - 별표

별표 기호 * 0개 이상의 발생과 일치 패턴이 남아 있습니다.

표현식 문자열 일치합니까?
ma*n mn 1 경기
man 1 경기
maaan 1 경기
main 일치하지 않음(a 뒤에 n가 오지 않습니다. )
woman 1 경기
<시간>

+ - 플러스

더하기 기호 + 하나 이상의 발생과 일치 패턴이 남아 있습니다.

표현식 문자열 일치합니까?
ma+n mn 일치하지 않음(a 없음) 문자)
man 1 경기
maaan 1 경기
main 일치 없음(다음에 n이 오지 않음)
woman 1 경기
<시간>

? - 물음표

물음표 기호 ? 0 또는 1회 발생과 일치 패턴이 남아 있습니다.

표현식 문자열 일치합니까?
ma?n mn 1 경기
man 1 경기
maaan 일치하지 않음(둘 이상의 a 문자)
main 일치 없음(다음에 n이 오지 않음)
woman 1 경기
<시간>

{} - 중괄호

다음 코드를 고려하십시오. {n,m} . 이것은 적어도 n을 의미합니다. , 최대 m 패턴이 반복됩니다.

표현식 문자열 일치합니까?
a{2,3} abc dat 일치하지 않음
abc daat 1개 일치(daat에서) )
aabc daaat 2개 일치(aabc에서) 및 daaat )
aabc daaaat 2개 일치(aabc에서) 및 daaaat )

한 가지 더 예를 들어 보겠습니다. 이 정규식 [0-9]{2, 4} 2자리 이상 4자리 이하 일치

표현식 문자열 일치합니까?
[0-9]{2,4} ab123csde 1개 일치(ab123csde에서 일치) )
12 and 345673 3개 일치(12 , 3456 , 73 )
1 and 2 일치하지 않음
<시간>

| - 대체

세로 막대 | 교대로 사용됩니다(or 연산자).

표현식 문자열 일치합니까?
a|b cde 일치하지 않음
ade 1개 일치(ade에서 일치) )
acdbea 3개 일치(acdbea에서) )

여기 a|b a를 포함하는 모든 문자열과 일치 또는 b

<시간>

() - 그룹

괄호 () 하위 패턴을 그룹화하는 데 사용됩니다. 예:(a|b|c)xz a 중 하나와 일치하는 모든 문자열과 일치 또는 b 또는 c 뒤에 xz

표현식 문자열 일치합니까?
(a|b|c)xz ab xz 일치하지 않음
abxz 1개 일치(abxz에서 일치) )
axz cabxz 2개 일치(axzbc cabxz에서) )
<시간>

\ - 백슬래시

백래시 \ 모든 메타 문자를 포함한 다양한 문자를 이스케이프하는 데 사용됩니다. 예를 들어,

\$a 문자열에 $이 포함된 경우 일치 뒤에 a . 여기, $ RegEx 엔진에 의해 특별한 방식으로 해석되지 않습니다.

문자에 특별한 의미가 있는지 확실하지 않은 경우 \을 입력할 수 있습니다. 그 앞에서. 이렇게 하면 캐릭터가 특별한 방식으로 취급되지 않습니다.

<시간>

특수 시퀀스

특수 시퀀스를 사용하면 일반적으로 사용되는 패턴을 더 쉽게 작성할 수 있습니다. 다음은 특수 시퀀스 목록입니다.

\A - 지정된 문자가 문자열의 시작 부분에 있는 경우 일치합니다.

표현식 문자열 일치합니까?
\Athe the sun 일치
In the sun 일치하지 않음
<시간>

\b - 지정된 문자가 단어의 시작 또는 끝에 있는 경우 일치합니다.

표현식 문자열 일치합니까?
\bfoo football 일치
a football 일치
afootball 일치하지 않음
foo\b the foo 일치
the afoo test 일치
the afootest 일치하지 않음
<시간>

\B - \b의 반대 . 지정된 문자가 아닌 경우 일치합니다. 단어의 시작이나 끝에.

표현식 문자열 일치합니까?
\Bfoo football 일치하지 않음
a football 일치하지 않음
afootball 일치
foo\B the foo 일치하지 않음
the afoo test 일치하지 않음
the afootest 일치
<시간>

\d - 모든 10진수와 일치합니다. [0-9]과 동일

표현식 문자열 일치합니까?
\d 12abc3 3개 일치(12abc3에서) )
Python 일치하지 않음
<시간>

\D - 10진수가 아닌 모든 숫자와 일치합니다. [^0-9]과 동일

표현식 문자열 일치합니까?
\D 1ab34"50 3개 일치(1ab34"50에서) )
1345 일치하지 않음
<시간>

\s - 문자열에 공백 문자가 포함된 경우와 일치합니다. [ \t\n\r\f\v]과 동일 .

표현식 문자열 일치합니까?
\s Python RegEx 1 경기
PythonRegEx 일치하지 않음
<시간>

\S - 문자열에 공백이 아닌 문자가 포함된 경우와 일치합니다. [^ \t\n\r\f\v]과 동일 .

표현식 문자열 일치합니까?
\S a b 2개 일치( a b에서) )
    일치하지 않음
<시간>

\w - 모든 영숫자 문자(숫자 및 알파벳)와 일치합니다. [a-zA-Z0-9_]과 동일 . 그건 그렇고, 밑줄 _ 영숫자로도 간주됩니다.

표현식 문자열 일치합니까?
\w 12&": ;c 3개 일치(12&": ;c에서) )
%"> ! 일치하지 않음
<시간>

\W - 영숫자가 아닌 모든 문자와 일치합니다. [^a-zA-Z0-9_]과 동일

표현식 문자열 일치합니까?
\W 1a2%c 1개 일치(1a2%c에서) )
Python 일치하지 않음
<시간>

\Z - 지정된 문자가 문자열의 끝에 있는 경우 일치합니다.

표현식 문자열 일치합니까?
Python\Z I like Python 1 경기
I like Python Programming 일치하지 않음
Python is fun. 일치하지 않음
<시간>

도움말: 정규식을 빌드하고 테스트하려면 regex101과 같은 RegEx 테스터 도구를 사용할 수 있습니다. 이 도구는 정규식을 만드는 데 도움이 될 뿐만 아니라 학습에도 도움이 됩니다.

이제 RegEx의 기본 사항을 이해했으므로 Python 코드에서 RegEx를 사용하는 방법에 대해 논의해 보겠습니다.

<시간>

파이썬 정규식

Python에는 re라는 모듈이 있습니다. 정규 표현식으로 작업합니다. 이를 사용하려면 모듈을 가져와야 합니다.

import re

모듈은 RegEx와 함께 작동하는 여러 함수와 상수를 정의합니다.

<시간>

re.findall()

re.findall() 메서드는 모든 일치 항목을 포함하는 문자열 목록을 반환합니다.

<시간>

예시 1:re.findall()


# Program to extract numbers from a string

import re

string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'

result = re.findall(pattern, string) 
print(result)

# Output: ['12', '89', '34']

패턴을 찾을 수 없는 경우 re.findall() 빈 목록을 반환합니다.

<시간>

re.split()

re.split 메소드는 일치하는 문자열을 분할하고 분할이 발생한 문자열의 목록을 반환합니다.

<시간>

예시 2:re.split()


import re

string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'

result = re.split(pattern, string) 
print(result)

# Output: ['Twelve:', ' Eighty nine:', '.']

패턴을 찾을 수 없는 경우 re.split() 원래 문자열을 포함하는 목록을 반환합니다.

<시간>

maxsplit를 통과할 수 있습니다. re.split()에 대한 인수 방법. 발생할 최대 분할 수입니다.


import re

string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'

# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1) 
print(result)

# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']

참고로 maxsplit의 기본값은 는 0입니다. 가능한 모든 분할을 의미합니다.

<시간>

re.sub()

re.sub() 구문 입니다:

re.sub(pattern, replace, string)

이 메서드는 일치하는 항목이 replace의 내용으로 대체되는 문자열을 반환합니다. 변수.

<시간>

예시 3:re.sub()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

패턴을 찾을 수 없는 경우 re.sub() 원래 문자열을 반환합니다.

<시간>

count를 전달할 수 있습니다. re.sub()의 네 번째 매개변수로 방법. 생략하면 0이 됩니다. 모든 항목을 대체합니다.


import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'
replace = ''

new_string = re.sub(r'\s+', replace, string, 1) 
print(new_string)

# Output:
# abc12de 23
# f45 6
<시간>

re.subn()

re.subn() re.sub()과 유사합니다. 단, 새 문자열과 대체 횟수를 포함하는 2개 항목의 튜플을 반환합니다.

<시간>

예시 4:re.subn()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.subn(pattern, replace, string) 
print(new_string)

# Output: ('abc12de23f456', 4)
<시간>

re.search()

re.search() 메소드는 패턴과 문자열의 두 가지 인수를 취합니다. 이 메서드는 RegEx 패턴이 문자열과 일치하는 첫 번째 위치를 찾습니다.

검색에 성공하면 re.search() 일치 개체를 반환합니다. 그렇지 않으면 None을 반환합니다. .

match = re.search(pattern, str)
<시간>

예시 5:re.search()


import re

string = "Python is fun"

# check if 'Python' is at the beginning
match = re.search('\APython', string)

if match:
  print("pattern found inside the string")
else:
  print("pattern not found")  

# Output: pattern found inside the string

여기, 일치 일치 개체를 포함합니다.

<시간>

일치 개체

dir() 함수를 사용하여 일치 개체의 메서드 및 속성을 가져올 수 있습니다.

일반적으로 사용되는 일치 개체의 일부 메서드 및 속성은 다음과 같습니다.

<시간>

match.group()

group() 메소드는 일치하는 문자열 부분을 반환합니다.

예 6:일치 개체


import re

string = '39801 356, 2102 1111'

# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'

# match variable contains a Match object.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("pattern not found")

# Output: 801 35

여기, 일치 변수에 일치 개체가 있습니다.

우리의 패턴 (\d{3}) (\d{2}) 두 개의 하위 그룹이 있습니다. (\d{3})(\d{2}) . 이러한 괄호로 묶인 하위 그룹의 문자열 일부를 가져올 수 있습니다. 방법은 다음과 같습니다.

>>> match.group(1)
'801'

>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')

>>> match.groups()
('801', '35')
<시간>

match.start(), match.end() 및 match.span()

start() 함수는 일치하는 부분 문자열의 시작 인덱스를 반환합니다. 마찬가지로 end() 일치하는 부분 문자열의 끝 인덱스를 반환합니다.

>>> match.start()
2
>>> match.end()
8

span() 함수는 일치하는 부분의 시작 및 끝 인덱스를 포함하는 튜플을 반환합니다.

>>> match.span()
(2, 8)
<시간>

match.re 및 match.string

re 일치하는 개체의 속성은 정규식 개체를 반환합니다. 마찬가지로 string 속성은 전달된 문자열을 반환합니다.

>>> match.re
re.compile('(\\d{3}) (\\d{2})')

>>> match.string
'39801 356, 2102 1111'
<시간>

re에 정의된 일반적으로 사용되는 모든 메서드를 다루었습니다. 기준 치수. 자세히 알아보려면 Python 3 re 모듈을 방문하세요.

<시간>

RegEx 앞에 r 접두사 사용

r일 때 또는 R 접두사는 정규식 앞에 사용되며 원시 문자열을 의미합니다. 예:'\n' r'\n'는 새 줄이지만 두 문자를 의미합니다. 백슬래시 \ 뒤에 n .

백래시 \ 모든 메타 문자를 포함한 다양한 문자를 이스케이프하는 데 사용됩니다. 그러나 r을 사용하면 접두사는 \을 만듭니다. 일반 캐릭터로 취급합니다.

<시간>

예제 7:r 접두사를 사용하는 원시 문자열


import re

string = '\n and \r are escape sequences.'

result = re.findall(r'[\n\r]', string) 
print(result)

# Output: ['\n', '\r']

python

  1. 파이썬 키워드와 식별자
  2. 파이썬 데이터 유형
  3. 파이썬 연산자
  4. 파이썬 함수 인수
  5. 파이썬 사전
  6. 파이썬 반복자
  7. 파이썬 클로저
  8. 파이썬 날짜 시간
  9. 파이썬 시간 모듈
  10. 파이썬 수면()