2017-03-25 8 views
1

구두점 (, /; /! /?)을 포함하여 문자열의 단어 수를 계산하려고합니다.구두점을 포함한 단어 수를 계산하는 중

지금까지 단어 수만 계산할 수 있었지만 구두점은 계산되지 않았습니다. 대체를 사용하여 각 구두점 앞에 공백을 넣으려고했지만 여전히 계산되지 않습니다. 누군가 나를 도울 수 있습니까?

내 코드 :

import re 
    input_text = input("Enter the data: ") 
    final_text = input_text.replace(',',' ,').replace(';',' ;').replace('.',' .').replace('?',' ?').replace('!',' !')  
    count = len(re.findall(r'\w+', final_text)) 
    print(count) 

예를 들어, 이 입력 용

안녕하세요. 잘 지냈어요? 나는 좋다! 너는 어때? 안녕!

모든 구두점을 포함하여 16 여야합니다. 그러나 나는 어떤 수입없이 만 11

+0

과 일치합니다? 그들을 추가? – dgg32

+0

코드 스 니펫의 ident가 이상합니다. – dgg32

+0

@ dgg32가 수정되었습니다. 그것을 지적 주셔서 감사합니다! 그리고 그것들을 추가하는 것은 잘 작동합니다! –

답변

3

사용하여 다음과 같은 접근 방식 :

s = "hi. how are you? I am good! what about you? bye!" 
result = len(re.findall(r'[^\w\s]|\w+', s)) 

print(result) # 16 

\w+ - (_ 밑줄 포함) 숫자 시퀀스와 일치합니다

[^\w\s] - 다음 구두점을 계산, 단어를 카운트 모든 숫자를 제외한 문자와 공백

+0

매력처럼 작동합니다! 고맙습니다 ! –

+1

@ phoenix_9, 오신 것을 환영합니다. – RomanPerekhrest

0

문제에 대한 간단한 솔루션을 얻고있다 :

my_string = "hi. how are you? I am good! what about you? bye!" 
space_words = my_string.strip().split(" ") 
count = len(space_words) 
for word in space_words: 
    for character in word: 
     if not character.isalpha(): 
      count += 1 
print count 

출력 :

16

+0

모든 단어에 구두점 문자가 하나만 있다고 가정하므로 안전하지 않습니다. 예 : 즉 스페인의 물음표가 실패 할 수도 있습니다. 그리고 그 단어에 deadmau5와 같은 숫자가 있다면? 미리 암의 대답은 훨씬 안전합니다. –