2017-03-25 87 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 

輸出:

+0

這是不安全的,因爲它假定每個單詞只有一個標點符號。縮寫像例如或者即將打破它,西班牙問號也會失敗:¿闕?那麼如果這個詞包含一個數字,比如deadmau5呢?米里亞姆的回答更安全。 –

相關問題