>

Python을 처음 접했고 제목이 충분히 구체적이지 않은 경우 사과를 드리고 싶지만 다른 단어로 표현할 방법을 모르겠습니다. 또한이 질문이 중복 된 경우 사과드립니다. 내가 말했듯이, 나는 무엇을 찾아야할지 정말로 모른다. 어쨌든, 내가하고 싶은 일은 다음과 같습니다.

다음과 같은 목록이 있습니다 : names = ['william shakespeare', 'shakira', 'tom ford', 'tim ford']

사용자가 이름을 입력 할 수 있기를 원하므로 name = input('Enter name:') 를 사용하겠습니다. 여기에 내가 붙어있는 곳이 있습니다. 사용자가 shak 와 같은 문자열을 입력 할 수 있기를 바랍니다.  프로그램에 1. William Shakespeare 2. Shakira 를 표시하십시오.  또는 사용자가 ford 를 넣은 경우  프로그램에 1. Tom Ford 2. Tim Ford 를 보여주십시오 , 사용자가 shakespeare 와 같이 더 구체적이되면  프로그램에 1. William Shakespeare 만 표시하십시오 .

이것이 정규식 질문이라고 생각하지만 정규식은 매우 혼란 스럽습니다. 나는 쓸모없는 몇 가지 비디오를 보았습니다. 모든 유형의 도움에 감사드립니다. 미리 감사드립니다!


  • 답변 # 1

    정규식은 제 생각에는 과잉입니다. for 루프를 사용하여 목록을 반복 할 수 있습니다. 그런 다음 in 를 사용하여  연산자를 사용하면 입력 한 문자열이 문자열 내에 있는지 확인할 수 있습니다 (하위 문자열이라고 함). 간단한 예를 들어 보겠습니다.

    names = ['william shakespeare', 'shakira', 'tom ford', 'tim ford']
    substring = input('Enter a substring: ')
    for name in names:
        if (substring in name):
            print(name)
    
    

    Python을 처음 사용한다고 말했기 때문에 목록 이해 나 복잡한 것을 사용하지 않았습니다.

  • 답변 # 2

    이 작업이 효과가 있습니까? 출력이 원하는 방식이 아닌 경우 나중에 해당 부분을 처리 할 수있을 것으로 기대합니다. 논리는 적용 가능한 각 이름을 찾습니다.

    names = ['william shakespeare', 'shakira', 'tom ford', 'tim ford']
    while True:
        name = input('Enter name: ')
        print([entry for entry in names if name in entry])
    
    

  • 답변 # 3

    names = ['william shakespeare', 'shakira', 'tom ford', 'tim ford']
    search = str(input("Please enter search term  "))
    ref = list(search.lower()) # this is your search text
    out = []
    count = 1
    ind = 0
    
    for i in names: # loops over your list
            #print () #take the hash out to see what is i
            for j in list(i.lower()): # list converts your variable into a list ie shakira = ['s','h'..]
                if j == ref[ind]:
                    ind += 1
                else:
                    ind = 0  
                if ind == len(ref): #ind is gonna go over each index in ref, if ind = the length of your 
            # search text then you have found a match
                    out.append(i)
                    ind = 0
                    break
    
    if len(out) == 0:
        out.append(" Nothing found ")
        count = 0
    for i in out:
        print ("{}. {}".format(count,i), end = "\t\t")
        count += 1
    
    

    좋아! 이 작업을 수행하는 방법에는 여러 가지가 있으며 가능한 한 간단하게 만들려고 노력했습니다. 결함 : Will과 William과 같이 비슷한 두 개의 이름이 있고 유언장을 검색하면 두 이름을 모두 얻게됩니다. 윌리엄을 검색하면 Willaim 만 제공합니다. 또한 디자인은 효율적이지 않고 두 개의 for 루프이며 기본적으로 목록의 문자 수 (총 문자 수)와 선형으로 실행됩니다.이 방법을 참조하십시오.

    list = ['william shakespeare', 'shakira', 'tom ford', 'tim ford']
    def get_matching_term(input, list):
        matches = []
        for word in list:
            if input.lower() in word.lower():
                matches.append(word)
        return matches
    thing_to_match = raw_input("Enter name to find:")
    matches = get_matching_term(thing_to_match, list)
    for idx, match in enumerate(matches):
        print("Match #" + str((idx + 1)) + ": " + match)
    
    

    그러면 그렇게 불러 낼 수 있습니다.

    python test.py
    Enter name to find: shak
    Match #1: william shakespeare
    Match #2: shakira
    
    

  • 답변 # 4

    정규식은 매우 유용하지만이 특정 예에서는 정규식이 필요하지 않습니다. 두 문자열 모두에서 string.lower ()를 사용하면이 대소 문자를 구분하지 않습니다.

    i=0
    For item in names:
      if name.lower() in item.lower():
        i++
        print str(i) + '. ' + item
    
    

관련 자료

  • 이전 Python 365에서 split을 사용하는 ValueError
  • 다음 node.js - 데이터베이스 쿼리 API 오류 구성