2012-12-22 1 views
3

파이썬에서 정규 표현식을 사용하여 페이지 소스를 검색하고 자바 스크립트에서 모든 json 정보를 찾습니다. 특히 예는 다음과 같이 보일 것이다 :Python에서 여러 줄 정규 표현식 사용?

 
var fooData = { 
    id: 123456789, 
    name : "foo bar", 
    country_name: "foo", 
    country_is_eu: null, 
    foo_bars: null, 
    foo_email: null, 
    foo_rate: 1.0, 
    foo_id: 0987654321 
}; 

나는 비교적 새로운 해요 모두를 이해하는 정규 표현식에 대해 알아야 할, 그리고 내가 뭘 내가 뭘하는 것이 맞는지 확실하지 않다. 몇 가지 개별 라인을 얻을 수는 있지만 재사용 방법을 완전히 모르겠습니다. 다중 라인. 지금 당장 가지고있는 코드입니다.

prog = re.compile('[var ]?\w+ ?= ?{[^.*]+\n};', re.MULTILINE) 
vars = prog.findall(text) 

왜 작동하지 않는 겁니까?

더 명확하게하기 위해, 난 정말 이런이 괄호 사이에있는 모든 일치해야합니다

그래서
 
var fooData = { 

}; 

는, 기본적으로 내가 보이는 제외한 모든 라인을 일치하는 방법을 알아낼 수 없습니다 이 :

+0

체크 아웃을 [내 반응은] (http://stackoverflow.com/a/14000225/1006989), 나는 그것을 업데이트, 어쩌면 당신은 그것을주고 싶습니다 시도해보십시오 –

+0

도와 주셔서 감사합니다! 나는 그것이'[^}] +'처럼 단순하다는 것을 깨닫지 못했지만, 당신이 그것을 할 수 있는지 몰랐습니다. – jackcogdill

+0

내장 된'json' 모듈이 유용합니다. 정규식 대신에 그것을 사용해야하는 것 같습니다. – ninMonkey

답변

2

이를 당신은 괄호를 포함하지 않는 무엇을 찾고있다 :

(?<=var fooData = {)[^}]+(?=};) 
+1

감사합니다! 내가 일을 마친 후에도 나를 도와 주심에 감사드립니다.^_ ^ – jackcogdill

0

확실하지 않은 경우 항상 설명서를 참조하십시오 (파이썬에는 매우 유용합니다).

multi-line mode은 캐럿 (^)으로 시작하고 a ($)로 끝나는 정규 표현식을 각 줄의 시작과 끝 ("줄"은 줄 바꿈 문자 \n 바로 뒤에 오는 것)과 일치시킵니다.

정규식의 시작과 끝 부분에 \n 초가 이미 있고이 자리에 findall() 함수를 사용하고있는 것으로 보입니다.

+0

명시된 패턴의 모든 인스턴스를 찾고 있기 때문에'findall()'을 사용하고 있습니다. 이미 문서를 읽었습니다. – jackcogdill

+0

@yentup'findall()'은 정규식의 모든 인스턴스와 일치하므로 정규 표현식의 처음과 끝에'\ n '이 있으면 다중 라인 모드는 쓸모가 없습니다. –

+0

'findall()'이 어떻게 작동하는지 알고 있습니다. 나는 바보가 아닙니다. 전체 페이지에서 모든 것을 찾으려고 노력하고 있습니다. 여러 줄은 대괄호 사이의 임의의 모든 정보를 찾는 것입니다. – jackcogdill

0

알았습니다. 여러 줄 모드가 필요하지 않은 것으로 드러났습니다. 끝나지 않은 모든 줄은 괄호 사이에있는 ;과 일치 시켰습니다. 나는 또한 약간 브래킷을 찾기위한 정규식을 수정 된, 여기에 내 코드입니다 : X.Jacobs에

re.findall('(?:var)?\w+[ ]?=[ ]?{\n(?:.+(?!(?<=;))\n)+};', text) 

감사합니다, 나는이 내 코드를 단순화 (고정) :

re.findall('(?:var)?\w+\s*=\s*{[^;]+};', text)