计算python中的省略号

问题描述 投票:0回答:2

我想写一个计算句子的程序。边界是(!|。|?| ...)。 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)
python counter
2个回答
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")

This outputs:

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

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})
© www.soinside.com 2019 - 2024. All rights reserved.