2014-10-01 4 views
3

저는 파이썬에서 일부 문자열이있는 목록을 가지고 있습니다. 목록에서 마녀 항목을 알고 싶다면 "A1_8301"과 같습니다. 이 "_"은 모든 문자가 될 수 있음을 의미합니다. 빠른 방법이 있습니까? 나는 SQL을 사용하는 경우"like"("%"와 "_")와 같은 Python의 문자열 비교

가, 난 그냥 A1_8301 "

감사합니다!

답변

6

파이썬에서 정규 표현식 사용하십시오 :.

요구 사항과 일치하는 요소 목록을 생성합니다.

  • ^$ 앵커는 문자열 일치를 방지하기 위해 필요하다; BA1k8301-42은 일치하지 않아야합니다. re.match() 호출은 테스트 된 문자열의 시작 부분에서만 일치하지만 ^을 사용하면 좀 더 명시 적이며 문자열 끝 앵커에 대해서는 $을 멋지게 반영합니다.
  • ._이 1 문자과 일치 함을 의미합니다.
+0

감사합니다! 설명을 아주 좋아했습니다. 정규 표현식을 조금 배웠습니다! – Antonio

+0

목록 대신 단 하나의 문자열을 사용하는 방법이 있습니까? 아니면 항목 목록을 만들어야합니까? – Antonio

+0

@Antonio :이 패턴이있는 긴 문자열이 있다는 뜻입니까? 그런 다음'^'와'$'앵커를 제거하고'pattern.findall (longer_string)'을 사용하십시오; 그게 너에게 성냥의 목록을 줄거야. –

2

정규 표현식은 아마 갈 수있는 방법입니다. IIRC을"같은 x는 "%.*에 매핑해야합니다 같은 것을 입력하고 _.에 매핑해야

matcher = re.compile('^A1.8301$') 
list_of_string = [s for s in stringlist if matcher.match(s)] 
+0

좋은 지적이지만, 우리가're.search'보다는're.match'를 사용하고 있기 때문에 문자열의 시작 부분에만 부분 문자열이 있습니다 ... 어쨌든 나는 업데이트했습니다. – mgilson

+0

공정한 점이지만, 어쨌든 명백하게하기 위해'^'를 사용하고 싶습니다. :-) –

+0

그래, 나는 그 이유 때문에 그것을 추가했다. – mgilson