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