2012-06-27 6 views
0

우선, 나는 정규 표현식을 쓰고있는 사람이 아니기 때문에 다시 작성할 수는 없습니다. 몇 가지 자바 정규 표현식을 꺼내서 파싱하려고 시도하지만 이들 사이에 약간의 차이가있는 것으로 보입니다. W3 스쿨의 예를 들어 정규 표현식을 테스트, 자바 스크립트가 이것을 보여줍니다Python에서 Javascript regexp를 구문 분석하는 방법은 무엇입니까?

"W3 스쿨"을 경고
var str="Visit W3Schools"; 
var patt1=/w3schools/i; 
alert(str.match(patt1)) 

. 그러나 파이썬에서는 다음과 같이 나타납니다.

import re 
str="Visit W3Schools" 
patt1=re.compile(r"/w3schools/i") 
print patt1.match(str) 

None을 인쇄합니다. Javascript 정규 표현식을 파이썬으로 변환하는 데 사용할 수있는 라이브러리가 있습니까?

+0

는'.match' 대'.search'를 검색합니다. –

+0

[w3schools를 사용하여 조심하십시오.] (http://w3fools.com) – Pointy

답변

1

작은 도우미 함수를 작성할 수 있도록/IG도 일할 수 :

def js_to_py_re(rx): 
    query, params = rx[1:].rsplit('/', 1) 
    if 'g' in params: 
     obj = re.findall 
    else: 
     obj = re.search 

    # May need to make flags= smarter, but just an example...  
    return lambda L: obj(query, L, flags=re.I if 'i' in params else 0) 

print js_to_py_re('/o/i')('school') 
# <_sre.SRE_Match object at 0x2d8fe68> 

print js_to_py_re('/O/ig')('school') 
# ['o', 'o'] 

print js_to_py_re('/O/g')('school') 
# [] 
+0

감사합니다. – Skyler

+0

명명 된 그룹이있는 regexes에서는이 작업을 수행 할 수 없습니다. 불행하게도 명명 된 그룹의 JS 스타일은 파이썬의 JS 스타일과 다릅니다. – RJH

+0

@RJH 내가 따르고 있는지 확실하지 않습니다. 작동하지 않을 수있는 예를 제공 할 수 있습니까? –

3

파이썬 .match의 경우 문자열 시작 부분에 만 일치합니다.

대신 사용하려는 것은 .search입니다.

또한, 당신은 '/'문자를 포함 할 필요가 없습니다, 당신은 영향을받지 검색 케이스 만들기 위해 re.compile하기 위해 별도의 인수를 사용합니다 : 자바 스크립트에서

>>> import re 
>>> str = "Visit W3Schools" 
>>> patt1 = re.compile('w3schools', re.I) 
>>> print patt1.search(str) 
<_sre.SRE_Match object at 0x10088e1d0> 

, 슬래시가를 re.compile을 호출하는 것과 같습니다.

나는 python regular expression module에서 읽을 것을 권할 수 있으며, 심지어 훌륭한 HOWTO입니다.

+0

+1 for'.match'와 .search' – AliBZ

1

정규 표현식에 / 문자 및 플래그를 포함하지 않으려면 하위 문자열 일치에 .match 대신 .search을 사용해야합니다.

시도 :

patt1 = re.compile(r"w3schools", flags=re.IGNORECASE) 
srch = patt1.search(str) 
print srch.group() 
관련 문제