2010-04-03 5 views
1

에 지정된 문자 사이의 문자열을하고있어 추출하고 난 다음 문자열이 : 나는 파이썬의 텍스트 Belyuen,NT,0801Larrakeyah,NT,0801를 추출하기 위해 노력하고나는 정규 표현식에 초보자는 파이썬

sequence = '["{\"First\":\"Belyuen,NT,0801\",\"Second\":\"Belyuen,NT,0801\"}","{\"First\":\"Larrakeyah,NT,0801\",\"Second\":\"Larrakeyah,NT,0801\"}"]' 

합니다.

re.search('\:\\"...\\', ''.join(sequence)) 

즉 : 나는 작동하지 않는 다음 코드가 문자 :\\ 사이의 문자열을 가져 오려고합니다.

답변

3

정규식을 사용하지 마십시오. 다소 이상하게 분할 된 JSON 문자열 집합 인 것 같습니다. 다시 결합하여 json 모듈을 사용하여 디코딩하십시오.

import json 
sequence = '[%s]' % ','.join(sequence) 
data = json.loads(sequence) 
print data[0]['First'], data[0]['Second'] 

는 (- 당신이 낮은 버전 다운로드를 가지고 simplejson를 설치하는 경우 JSON 모듈이 Python2.6의 새로운 참고).

+0

필요하지 않습니다). 해석기는'data = json.loads (sequence)'줄에 오류를 던지고 오류는'raise ValueError (errmsg ("Expecting object", s, end))' – Seth

+0

코드의 두 번째 줄을 없애면 '{ "First": "Belyuen, NT, 0801", "Second": "Belyuen, NT, 0801"} – Seth

+0

그리고'data [0] [ ' 'print'[0] [ 'First'] TypeError : 문자열 인덱스는 정수 여야합니다. – Seth

3

는 파이썬 딕셔너리의 적절한 직렬화 것 같아, 당신은 할 수 :

>>> sequence = ["{\"First\":\"Belyuen,NT,0801\",\"Second\":\"Belyuen,NT,0801\"}","{\"First\":\"Larrakeyah,NT,0801\",\"Second\":\"Larrakeyah,NT,0801\"}"] 
>>> import json 
>>> for i in sequence: 
    d = json.loads(i) 
    print(d['First']) 


Belyuen,NT,0801 
Larrakeyah,NT,0801 
+0

시퀀스는 실제로 목록이 아닌 문자열입니다 (질문이 업데이트되었습니다). 그렇다면 json 모듈에 문자열로 어떻게로드합니까? – Seth

+0

@seth : 아쉽게도 입력 문자열의 따옴표가 잘못 사용 된 것으로 보입니다. 'json' 또는'eval'과 함께 작동하지 않습니다. 대체 작은 따옴표와 큰 따옴표를 사용하여 문제를 해결하면 필요한 곳에 이스케이프 처리 한 다음 표시된 방법으로 정상적으로 작동합니다. 다시 말하지만, string 내에서 따옴표를 교대로 사용해야하며 원래 파이썬 문자열에 사용 된 따옴표는 물론 이스케이프되어야합니다. – SilentGhost

+0

답장을 보내 주셔서 감사합니다. Daniel Roseman의 대답에 대한 저의 의견을 확인하십시오. 나는 필요한 것을 내가 복잡한 방식으로 추출하는 것을 끝내었지만 그럼에도 불구하고 그것을 얻었다. 도움과 유용한 답변을 +1하십시오. – Seth

2

당신이 순서가 (내가 질문을 업데이트 실제로 문자열 형식이다 정규식

>>> sequence = ["{\"First\":\"Belyuen,NT,0801\",\"Second\":\"Belyuen,NT,0801\"}","{\"First\":\"Larrakeyah,NT,0801\",\"Second\":\"Larrakeyah,NT,0801\"}"] 
>>> for item in sequence: 
... print eval(item).values() 
... 
['Belyuen,NT,0801', 'Belyuen,NT,0801'] 
['Larrakeyah,NT,0801', 'Larrakeyah,NT,0801'] 
+0

더 나은 사용 json – hop

+0

솔루션은 <2.6 버전에서 작동합니다. 그리고 저는 다른 모듈을 다운로드하고 싶지 않습니다. – ghostdog74

관련 문제