我在Python中制作一个单词计数器程序。我使用了以下正则表达式:
match = re.findall(r'\w+',fetch)
起初,它似乎工作正常。然而,在阅读这里的另一篇文章后,我开始意识到这个正则表达式代码实际上无法计算合同形式,例如" can&#t;#34;""&#t; t&#34 ;。我还希望我的程序将缩小的表单计算为Microsoft Word所做的一个单词,这样我的程序就可以成为完整的单词计数器。我怎么能这样做?
答案 0 :(得分:3)
我们可以专注于非空格(即\S
),而不是过度关注合同形式等。因此可以将其用作:
match = re.findall(r'\S+',fetch)
然后会产生:
>>> fetch = "I don't want to count contracted forms like don't and can't as two words."
>>> import re
>>> re.findall(r'\S+', fetch)
['I', "don't", 'want', 'to', 'count', 'contracted', 'forms', 'like', "don't", 'and', "can't", 'as', 'two', 'words.']
请注意,我们还在点后添加点。所以我们计算非空间序列。
答案 1 :(得分:1)
另一种解决方案,您可以将split与一个或多个空格一起使用,如下所示:
match = re.split('\s+', fetch)
答案 2 :(得分:1)
试试这个。这也算得上"不能"
len(fetch.split())
答案 3 :(得分:1)
你可以试试这个。在括号中添加所需的标点符号。其他答案可能会遇到其他标点,如"。"。它应该取决于问题来决定哪个适合。
match = re.findall(r'[a-zA-Z\']+',fetch)
fetch = "That's crazy. I'm not going to be like that. I just can't."
["That's",
'crazy',
"I'm",
'not',
'going',
'to',
'be',
'like',
'that',
'I',
'just',
"can't"]