문제

HTML 페이지에서 제목을 추출하는 정규 표현식을 원합니다. 현재 나는 이것을 가지고있다 :

title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
    title = title.replace('<title>', '').replace('</title>', '') 

내용 만 추출하는 정규 표현이 있습니까?u003Ctitle> 그래서 태그를 제거 할 필요가 없습니까?

도움이 되었습니까?

해결책

사용 ( ) Regexp에서 group(1) 캡처 된 문자열을 검색하기 위해 파이썬에서re.search 돌아올 것입니다 None 결과를 찾지 못하면 그렇습니다 사용하지 마십시오 group() 곧장):

title_search = re.search('<title>(.*)</title>', html, re.IGNORECASE)

if title_search:
    title = title_search.group(1)

다른 팁

캡처 그룹을 사용해보십시오.

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을 파서로 사용하는 데 대한 옵션이 있습니다. 요소 그룹.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top