2011-10-30 2 views
1

파이썬을 사용하여 'tune-yards' (하이픈 포함)이라고 말할 수있는 텍스트 블록에서 'tune yards'을 검색하고 싶습니다. 'tune yards' (없이)를 검색 할 수 있습니다. 나는 둘 다 성냥으로 간주되기를 원한다. 나는 find() 함수를 사용하고있다. elif 문장을 스태킹하는 대신 -과 공백을 하나로 처리하는 좋은 Pythonic 방법이 있습니까?Python find() 호출에서 두 문자를 동일하게 만듭니다.

이 같은

뭔가 :

treating '-' as ' ': 
    if blockOfText.find('tune yards') > -1: 
     do something 
+0

는 ('-', '')'텍스트의 방어가 파이썬을 배우면서 내가 re' '와 많이 감동했습니다 –

답변

4
>>> re.search('tune[ -]yards', '58 tune yards of music') 
<_sre.SRE_Match object at 0x1ad68b8> 
>>> re.search('tune[ -]yards', '35 tune-yards of trombone') 
<_sre.SRE_Match object at 0x1ad6988> 

과 일치하는 객체는 (다른 가능한 반환 값이 None 인 상태) 항상 true, 그래서 결과는 할 수 있습니다 (P를 나는이 작동하지 않습니다 알고) if을 통해 테스트해야합니다. 나는`대체하지 않으려 고 노력하고

+0

부진 것처럼 보인다 때문이다. 감사합니다. –

0
if (blockOfText.find('tune yards') + blockOfText.find('tune-yards')) > -1: 
    do something 
+0

위치 0에있는 텍스트를 찾지 못합니다. –

+1

일치하는 위치가 중요하지 않은 경우 find()가 불편합니다. blockOfText에서 "tune yards"를 사용하거나 blockOfText에서 'tune-yards'를 사용하십시오. –

관련 문제