2015-01-20 2 views
1

파이썬 정규식을 사용하여 문서 내부에 나타나는 모든 인용문을 추출하려고합니다.정규식을 사용하여 문서/텍스트의 모든 인용문을 추출하는 방법은 무엇입니까?

다음과 같이 내가 코드를 가지고 있지만, 그것은 작동하지 않습니다 :

import re 
hand = open('citi.txt') 
for line in hand: 
    line = line.rstrip() 
    if re.search('(?:"(.*?)")', line): 
     print line 
+0

"작동하지 않음"을 정의하십시오. 무슨 문제입니까, 정확하게 당신은 관찰합니까? 이 코드는 적어도 두 번 "'" ''이있는 모든 행을 출력해야합니다 - ** ** ** 당신이 원하는 것이 아닌가요? 여러분이 원하는 것과 얻는 것을 보여주는 작은 예제를주세요. 장난감 크기의'city.txt', 예를 들어 작은 세 줄) –

+0

당신이 정규식이라고 말했지만 ... open ('citi.txt')은 어떨까요? read(). replace (' "' ',' ')? – frodopwns

+0

if 진술을'print re.search (r '(? : "(. *?)"), line) .group (1)' –

답변

3

당신은 오히려 전체 라인을 인쇄하는 것보다 줄에서만 인용 텍스트를 추출 할 re.findall('(?:"(.*?)")', line)을 사용할 수 있습니다 더 많은 일을보다가있는 경우에도 회선 당 발생. 코드는 다음과 같이 수정할 수 있습니다.

import re 

# This will make sure citi.txt is properly closed after opening it. 
# infl.read() will read the whole file as single string, so no need to loop 
with open('citi.txt', 'r') as infl: 
    hand = infl.read() 

# And look for occurences of your string 
match = re.findall('(?:"(.*?)")', hand) 
if match: 
    print match 

line == 'This is "a sample" line with "two quoted" substrings' 경우,이 코드는 ['a sample', 'two quoted']

편집을 인쇄합니다 : 당신의 따옴표는 유니 코드 문자 것 같다 유니 코드

에 적응. "(나도 처음에 발견되지 않았 음) “, ”을 사이에 미묘한 차이를 참고

내 원래의 대답은 당신의 코드 예제는 ASCII 문자열을 기반으로하지만,이 같은 정규식 문자열이 필요합니다

:.

match = re.findall(u'(?:\u201c(.*?)\u201d)', hand) 

설명 :. \u201c바로 따옴표에 대한 따옴표\u201d 왼쪽위한의 u가 유니 코드로 문자열을 표시

이것은 발췌 한 부분과 함께 작동합니다.

+0

나는 그것을 시도했지만 작동하지 않았다. 명확하게 말하면 인용 된 모든 내용, 즉 텍스트의 인용구 하나 하나를 찾아서 표시하려고합니다. – user3612287

+0

어떤 오류가 발생합니까? 그것은 확실히 나를 위해 작동합니다. – Geotob

+0

아무 것도 반환하지 않았습니다. 문제는 따옴표 붙은 텍스트가 괄호 ("인용 된 텍스트") 안에 표시된다는 사실과 관련이 있습니까? 괄호는 어떻게 처리할까요? 여기에 발췌 (및 감사합니다! :)) Citibank, NA ("CBNA")는 HighArc Capital Management, LP ("상대방")에게 잠재적 인 매각에 관한 특정 정보를 제공합니다. 플로리다 주 마이애미에있는 쇼어 클럽 ("정보"및 그와 같은 거래, "거래")에서 특정 부채의 일부 또는 전부 ("융자")가 이해 관계를 방해합니다. @Geotob – user3612287

관련 문제