2012-12-19 3 views
8

패턴 (?<!(asp|php|jsp))\?.*은 PCRE에서 작동하지만 파이썬에서는 작동하지 않습니다.Python Regex Negative Lookbehind

그래서이 정규 표현식을 파이썬에서 사용하려면 어떻게해야합니까? (Python 2.7)

+6

어떻게 작동하지 않습니까? 오류가 있습니까? 그렇다면 오류를 게시하십시오. 예상과 일치하지 않습니까? 그렇다면 코드를 사용하는 곳에 게시하고 얻은 결과를 예상 한 것과 비교하십시오. – BrenBarn

+0

다음은 re 모듈의 [doc] (http://docs.python.org/2/library/re.html)이며 부정적인 lookbehind 어설 션에 대한 지원을 명확히 기술하고 있습니다. –

+3

모든 대안의 길이가 동일한 경우 제외 검색 기능이 작동합니다. 그래서 이것은'(? georg

답변

9

그것은 나를 위해 완벽하게 작동합니다. 당신이 잘못 사용한 것입니까? re.match 대신 re.search를 사용해야합니다 :

>>> import re 
>>> s = 'somestring.asp?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
>>> s = 'somestring.xml?1=123' 
>>> re.search(r"(?<!(asp|php|jsp))\?.*", s) 
<_sre.SRE_Match object at 0x0000000002DCB098> 

당신의 패턴 작동 방법을 정확히. glglgl에서 언급했듯이 Match 개체를 변수 (예 : m)에 할당하고 m.group()을 호출하면 일치하는 항목을 얻을 수 있습니다. 그 결과는 ?1=123입니다.

그런데 안쪽 괄호를 생략 할 수 있습니다. 이 패턴은 다음과 같습니다.

(?<!asp|php|jsp)\?.* 
+1

... 그리고're.search (r "(? glglgl