计算python中的省略号

时间:2017-12-23 09:59:26

标签: python counter

我想写一个计算句子的程序。边界是(!|。|?| ...)。 python只计算!和。和?我该怎么做才算数......我试图用通常的形式写它,但它用省略号计算每个点。请给我一个建议。

   f = input ("text") 
   znak = 0 
   for s in f: 
i = s.find('.') 
if i > -1: 
    znak += 1 
else:
    i = s.find('!') 
    if i > -1:
        znak += 1
    else:
        i = s.find('?') 
        if i > -1: 
            znak += 1
        else:
            i = s.find('...')
            if i> -1:
                znak +=1
  print('Предложений:', znak)

2 个答案:

答案 0 :(得分:2)

如果我正确理解您的问题,您可以使用string.count(substring)

执行此操作
punctuation = ["!", "?", "...", "."]
s = "Hello. World? This is a... Test!"

punc_count = [s.count(i) for i in punctuation]

# Take into account for "." matching multiple times when "..." occours
punc_count[3] -= punc_count[2] * 3

for index, value in enumerate(punc_count):
    print(punctuation[index], "occours", value, "times")

total = sum(punc_count)
print("There are", total, "sentences in the string")

输出:

! occours 1 times
? occours 1 times
... occours 1 times
. occours 1 times
There are 4 sentences in the string

答案 1 :(得分:2)

您可以使用regular expression之类的...|.|!|?,尽管您必须转义大多数字符,因为它们在正则表达式中具有特殊含义。重要提示:正则表达式必须在 ...之前包含. ,否则它将与...匹配为三个.而不是...

>>> import re
>>> s = "sentence with ! and ? and ... and ."
>>> p = re.compile(r"\.\.\.|\.|\!|\?")
>>> p.findall(s)
['!', '?', '...', '.']
>>> sum(1 for _ in p.finditer(s))
4

或与collections.Counter结合使用:

>>> Counter({'!': 1, '...': 1, '?': 1, '.': 1})
Counter({'!': 1, '...': 1, '?': 1, '.': 1})