Regex 매치의 일부를 추출하십시오
-
19-09-2019 - |
문제
HTML 페이지에서 제목을 추출하는 정규 표현식을 원합니다. 현재 나는 이것을 가지고있다 :
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
내용 만 추출하는 정규 표현이 있습니까?u003Ctitle> 그래서 태그를 제거 할 필요가 없습니까?
다른 팁
캡처 그룹을 사용해보십시오.
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
시작하십시오 Python 3.8
, 및 소개 과제 표현 (PEP 572) (:=
운영자), 약간의 개선이 가능합니다. Krzysztof Krasoń의 해결책 일치 결과를 IF 조건 내에서 변수로 직접 캡처하여 조건의 본문에서 재사용합니다.
# pattern = '<title>(.*)</title>'
# text = '<title>hello</title>'
if match := re.search(pattern, text, re.IGNORECASE):
title = match.group(1)
# hello
re.search('<title>(.*)</title>', s, re.IGNORECASE).group(1)
제공된 코드 조각은 대처하지 않습니다 Exceptions
제안해도됩니다
getattr(re.search(r"<title>(.*)</title>", s, re.IGNORECASE), 'groups', lambda:[u""])()[0]
패턴이 발견되지 않은 경우 기본적으로 빈 문자열을 반환합니다.
노력하다:
title = re.search('<title>(.*)</title>', html, re.IGNORECASE).group(1)
아름다운 수프를 추천해도됩니다. 수프는 모든 HTML 문서를 구문 분석하기에 아주 좋은 lib입니다.
soup = BeatifulSoup(html_doc)
titleName = soup.title.name
나는 이것이 충분하다고 생각할 것입니다 :
#!python
import re
pattern = re.compile(r'<title>([^<]*)</title>', re.MULTILINE|re.IGNORECASE)
pattern.search(text)
... 텍스트 (HTML)가 "텍스트"라는 변수라고 가정합니다.
이것은 또한 HTML 제목 태그에 법적으로 포함될 수있는 다른 HTML 태그가 없으며 그러한 컨테이너/블록 내에 다른 <문자를 법적으로 포함 할 수있는 방법이 없다고 가정합니다.
하지만 ...
파이썬에서 HTML 구문 분석에 정규 표현식을 사용하지 마십시오. HTML 파서를 사용하십시오! (다양한 HTML, SGML 및 XML Parsers가 이미 표준 라이브러리에있을 때 추가 작업이 될 수있는 전체 파서를 쓰지 않는 한.
"현실 세계"취급 인 경우 태그 수프 HTML (SGML/XML 유효성 검사기에 대한 정보가 부족한 경우) BeautifulSoup 패키지. 표준 라이브러리에 있지는 않지만이 목적을 위해 널리 권장됩니다.
또 다른 옵션은 다음과 같습니다. LXML ... 적절하게 구조화 된 (표준 준수) HTML을 위해 작성되었습니다. 그러나 BeautifulSoup을 파서로 사용하는 데 대한 옵션이 있습니다. 요소 그룹.