2016-10-16 3 views
0

주어진 텍스트를 사용하는 프로그램을 만들고, 텍스트 전체에 어떤 색인 (")이 있는지 확인하고 인용 부호 (") 사이에 무엇이든 인쇄합니다. ie "xyz"blablabla "abc". 이 경우 0과 4 사이의 xyz와 16과 20 사이의 abc가 인쇄됩니다. 인덱스를 작동시킬 부분이 있지만이 인덱스의 범위 내에있는 것이 무엇이든 인쇄하는 방법을 찾지 못하는 것 같습니다. 여기 내 코드는 다음과 같습니다.일치하는 색인이있는 문자열 부분을 인쇄하십시오.

text = '"bleed" seed "deed"' 

index = 0 

a = 0 

find = int(input("Would you like to find all the links in the file?\n If yes, enter 1: ")) 

def Link_Finder(a): 

    index = 0 

    if find == 1: 

     while index < len(text): 

      index = text.find('"', index) 

      if index == -1: 

       break 


      print('" found at', index) 


      index = index + 2 

    return index 

Link_Finder(a) 

print(text[index:]) 

색인은 내 참조 용으로 만 인쇄합니다. 저는 아직 파이썬에 익숙하지 않아서 복잡한 것을 아직 잘 모릅니다.

내 생각에 이렇게하는 한 가지 방법은 인덱스 값을 반환하고 반환 된 값을 사용하여 필요한 텍스트를 인쇄하는 것입니다.

감사합니다.

답변

1

정규 표현식을 사용하여 괜찮다면, 나는이 쉬운 솔루션입니다 생각 : 반복 한 후

def link_finder(s): 
    index = 0 
    while index < len(s): 
     index = s.find('"', index) 
     if index == -1: 
      break 
     yield index 
     index = index + 2 

: 그리고, 당신이 당신의 link_finder 기능을 사용할 수 있습니다

import re 
print(re.findall(r'"([^"]*)"', text)) 

그렇지 않은 경우 쌍으로 결과입니다.

results = list(link_finder(text)) 

for start, end in zip(results[::2], results[1::2]): 
    print text[start+1:end] 
+0

결과 : 목록 (link_finder (텍스트)) 시작, 종료 (결과 [:: 2], 결과 [1 :: 2]) : 인쇄 텍스트 [시작 + 1 : 끝] – Hamza

+0

죄송합니다 실수로 반환 키를 눌렀습니다. 나는 결과가 여기에 변수이고 For Loop가 뒤 따른다는 것을 안다. For 루프, 특히 Zip 파트를 설명 할만큼 친절하십니까? – Hamza

+0

'zip'은리스트 당 한 엘리먼트의 튜플 목록을 반환합니다 :'zip ([1, 2, 3], [4, 5,6]) == [(1,4), (2, 5)), (3, 6)]'이고, [:: 2] [1 :: 2]는 슬라이싱 (slicing)이라고 불리며, 기본적으로 다른 모든 요소와 함께리스트를 생성합니다. –

관련 문제