2009-12-31 3 views
5

new way to recognise 주소를 파이썬에서 사용하려면 어떻게 다시 작성해야합니까? 내가 파이썬 생각하지 않는다Gruber의 URL Python의 정규 표현식

\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))

+0

어떤 부분이 작동하지 않습니까? –

+0

질문에 코드를 넣지 마십시오. –

+0

@vanity가 실패한 예제와 함께 유니 코드 문자 속성이있는 대답은 작동하지 않습니다. http://stackoverflow.com/questions/1832893/python-regex-matching-unicode-properties –

답변

12

그의 original source 미국 ASCII에 해당하며 특히 펄 "이 패턴은 가장 현대 정규식 구현에서 작동합니다." 파이썬의 정규식 구현은 현대적이며 similar to Perl's이지만 [:punct:] 문자 클래스가 없습니다. 당신은 쉽게를 사용하는 것을 구축 할 수 있습니다 : 문자 as required을 설정 내부

>>> import string, re 
>>> pat = r'\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^%s\s]|/)))' 
>>> pat = pat % re.sub(r'([-\\\]])', r'\\\1', string.punctuation) 

re.sub() 호출은 특정 문자를 이스케이프합니다.

편집 : 그냥 모든 앞에 백 슬래시 스틱 이후 re.escape 사용은(), 그냥 잘 작동합니다. 처음에는 나에게 미숙 한 느낌 이었지만,이 경우에는 확실히 잘 작동합니다.

>>> pat = pat % re.escape(string.punctuation) 
+0

이것은 pat = pat % re.escape (string.punctuation) – Tobias

+0

@vanity와 마찬가지로 Gruber의 모든 테스트를 통과합니다. 데이터 소스가 유니 코드 인 경우 string.punctuation과 같은 순수 ASCII 솔루션이 불완전한 결과를 초래할 수 있다는 점에 유의하십시오. –

+0

ASCII가 아닌 도메인과 경로에서 작동합니다. 영어 이외의 구두점이있는 테스트 데이터가 없습니다. – Tobias

5

POSIX bracket expressions이없는

[-!\"#$%&\'()*+,./:;<=>[email protected]\\[\\\\]^_`{|}~] 
+0

Wikipedia가 잘못되었습니다.를 참조하십시오. http://www.regular-expressions.info/posixbrackets.html에 따르면, 캐럿이 빠져 있습니다. –

+0

좋아, 지금 그것이 옳다. 답변을 업데이트하십시오. –

+0

예, 내 게시물을 업데이트했습니다. 감사합니다. 누군가 위키 백과도 업데이트했습니다. 큰! – YOU

2

파이썬

[:punct:] 

Wikipedia[:punct:]은 동일 말한다이 표현이있다.

[:punct:] 브래킷식이

[!"#$%&'()*+,\-./:;<=>[email protected][\\\]^_`{|}~] 
+0

백 슬래시 이스케이프가 올바르지 않으므로 "raw"문자열 (접두사'r')을 사용해야합니다. –

+0

파이썬은 유니 코드 문자 프로퍼티를 지원하지 않습니다. http://stackoverflow.com/questions/1832893 –

+0

사실, 컴파일은 잘되고 있지만 예상대로하지 마십시오. – Tobias