순서를 가지고 있는 문자열의 일치(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()
댓글 없음:
댓글 쓰기