2019년 11월 3일 일요일

순서를 가지고 있는 문자열의 일치(match) 여부 검색 in Python


순서를 가지고 있는 문자열의 일치(match) 여부 검색 in Python


예제

주어진 문장 : 'Slim stretch washed shirt in solid with long sleeves, button-down collar, and pocket on left chest'
검색을 원하는 단어 : ['shirt','solid','left'] , 결과 : 순서대로 일치하면 True, 일치하지 않으면 False 위 문장에서 순서대로 존재 하므로 True
검색을 원하는 단어 : ['shirt','left','solid'] , 결과 : 순서가 맞지 않음 False
사용 언어 : Python3

해결 방법

사용할 함수 : str.find()
string find는 전체 문장에서 string이 있는 위치를 알려줍니다. 루프를 반복하면서 일치하면 일하한 시점의 뒤부터 검색하도록 범위를 조절합니다. 마지막까지 모두 검색하였으면 True를 리턴합니다. 도중에 실패했으면 False 넘김니다.

순서도

대충 그려 보면 아래 정도...


완성 코드



import unittest

def is_matched_wordered(fstr, findlist):
    for onestr in findlist:
        findpos = fstr.find(onestr)
        if findpos < 0 :
            return False
        else:
            fstr = fstr[findpos+len(onestr):]
            #print(fstr)
    return True

class unit_test(unittest.TestCase):
    def test_1(self):
        test_str = 'Slim stretch washed shirt in solid with long sleeves, button-down collar, and pocket on left chest'
        self.assertEqual(is_matched_wordered(test_str, ['shirt','solid','left']),True)
        self.assertEqual(is_matched_wordered(test_str, ['shirt','left','solid']),False)
        self.assertEqual(is_matched_wordered(test_str, ['shirt','left','chest']),True)
        self.assertEqual(is_matched_wordered(test_str, ['shirt','left','chest ']),False)
        self.assertEqual(is_matched_wordered(test_str, ['Slim stretch washed shirt in solid with long sleeves, button-down collar, and pocket on left chest']),True)
        return

if __name__ == '__main__':
    unittest.main()















댓글 없음:

댓글 쓰기