Python에서 정규식을 사용하여 문자열을 추출하는 방법

巴扎黑
풀어 주다: 2017-03-30 14:17:02
원래의
2252명이 탐색했습니다.

서문

정규식에 대한 기본 지식은 다루지 않겠습니다. 관심이 있으시면 여기를 클릭하세요. 하나는 추출(Extract)으로 텍스트의 한 위치에서 문자열을 추출하는 것이고, 다른 하나는 연속된 여러 위치에서 문자열을 추출하는 것입니다. 로그 분석을 하다 보면 이런 상황이 발생하는데, 아래에서 해당 방법에 대해 이야기하겠습니다.

1. 단일 위치에서 문자열 추출

이 경우 정규식(.+?)을 사용하여 추출할 수 있습니다. 예를 들어 문자열 "a123b"의 경우 ab 사이의 값 123을 추출하려면 정규식과 함께 findall을 사용할 수 있습니다. 그러면 일치하는 모든 상황이 포함된 목록이 반환됩니다.

코드는 다음과 같습니다.

import re
str = "a123b"
print re.findall(r"a(.+?)b",str)#
输出['123']
로그인 후 복사



1.1 탐욕과 비욕심 매칭

문자열 "a123b456b"가 있는 경우 a와 첫 번째 b 사이의 값 대신 a와 마지막 b 사이의 모든 값을 일치시키려면 ? 어울리는.

코드는 다음과 같습니다.

import re
str = "a123b456b"

print re.findall(r"a(.+?)b", str)
#输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况

print re.findall(r"a(.+)b", str)
#输出['123b456']

print re.findall(r"a(.*)b", str)
#输出['123b456']
로그인 후 복사



1.2 다줄 매칭

하면 여러 줄 일치를 원하는 경우 re.S를 추가한 후 re.S 및 re.M 플래그를 추가해야 합니다. 개행 문자와 일치합니다. 기본값은 개행 문자와 일치하지 않습니다.

코드는 다음과 같습니다.

str = "a23b\na34b"

re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况

re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]
로그인 후 복사



re.M을 추가한 후 ^$ 표시는 기본적으로 각 줄과 일치합니다. $는 첫 번째 줄에만 일치합니다.

코드는 다음과 같습니다.

str = "a23b\na34b"

re.findall(r"^a(\d+)b", str)
#输出['23']

re.findall(r"^a(\d+)b", str, re.M)
#输出['23', '34']
로그인 후 복사



2. 연속된 여러 위치의 문자열 추출

이 경우 정규식

(?P<name>…)
로그인 후 복사

를 사용하여 추출할 수 있습니다. 예를 들어, 웹 서버 액세스 로그 줄이

&#39;192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"&#39;
로그인 후 복사

이고 이 로그 줄의 모든 콘텐츠를 추출하려는 경우 여러

(?P<name>expr)
로그인 후 복사

를 작성하여 추출할 수 있습니다. 이름은 임의로 변경할 수 있습니다. 위치 문자열로 명명된 변수에 대해서는 expr을 정규식으로 변경하여 위치를 추출할 수 있습니다.

코드는 다음과 같습니다.

import re
line =&#39;192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"&#39;
reg = re.compile(&#39;^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"&#39;)
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print linebits
for k, v in linebits.items() :
 print k+": "+v
로그인 후 복사



출력 결과는

status: 200
referrer: 
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34size: 44
remote_ip: 192.168.0.1
로그인 후 복사



요약

위 내용은 이 글의 전체 내용입니다. 모두의 공부나 업무에 도움이 됩니다. 궁금한 점이 있으면 메시지를 남겨주세요.

위 내용은 Python에서 정규식을 사용하여 문자열을 추출하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!