仅用“应该”之类的单词来计算撇号的变量的最佳方法是什么。
例如“我不应该那样做”算一次 但是“'我不会那样做'”计数为零
基本上,我如何使用计数来计算单词而不是引号中的撇号。
我无法成功尝试很多。我只能使用基本的for循环来计算每个撇号,但不能专门缩小范围。
for sentence in split_sentences:
for w in sentence:
for p in punctuation:
if p == w:
if word in counts:
counts[p] += 1
else:
counts[p] = 1
else:
pass
对于给定的单词列表,它应该仅计入单词,而不是单词周围。 因此,“应该”不会计数,而“应该”则不会计数。
答案 0 :(得分:4)
您可以检查它是否在里面一词:
for sentence in split_sentences:
for w in sentence:
for p in punctuation:
if p in w and w[0] != p and w[-1] != p:
if word in counts:
counts[p] += 1
else:
counts[p] = 1
else:
pass
重要的一行是if p in w and w[0] != p and w[-1] != p:
我们有3条规则可以计算:
p
用词2
w
一词不以标点符号w[0]
开头(p
w
的结尾不是w[-1]
的结尾(p
更Python化的方法是使用可用的str方法endswith
和startswith
:
...
if p in w and not w.startswith(p) and not w.endswith(p):
...
答案 1 :(得分:0)
您可以使用正则表达式[a-zA-Z]'[a-zA-Z]
查找所有用字母括起来的单引号。
对连字符的要求对我来说还不是很清楚。如果它具有相同的要求(即,仅在被字母包围时才计数),而不是使用正则表达式[a-zA-Z]['-][a-zA-Z]
会达到目的:它将计算引号和连字符。
如果您应该计算所有 连字符,则可以只使用str.count方法(例如
"test-string".count("-")
返回1)。
这是一些示例代码,假设连字符必须仅在字母周围被计数时,也必须计算:
import re
TEST_SENTENCES = (
"I shouldn't do that",
"'I will not do that'",
"Test-hyphen"
)
PATTERN = re.compile("[a-zA-Z]['-][a-zA-Z]")
for sentence in TEST_SENTENCES:
print(len(PATTERN.findall(sentence)))
输出:
1
0
1