这是How to count characters in a string?和Find out how many times a regex matches in a string in Python 的后续问题
我要计算字符串中的所有字母字符:
'Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...'
str.count()
方法允许计算特定字母。使用count方法,如何计算整个字符串中的任何字母?
我试图在count方法中使用一个正则表达式,但是它返回0而不是83。我使用的代码是:
import re
spam_data['text'][0].count((r'[a-zA-Z]'))
当我使用时:
len(re.findall((r'[a-zA-Z]'), spam_data['text'][0]))
返回长度为83。
为什么计数在这里返回0?
答案 0 :(得分:2)
您应该使用str.count
而不是计数。
spam_data['text'].str.count('\w')
0 83
Name: text, dtype: int64
要访问第一个值,请使用:
spam_data['text'].str.count('\w')[0]
83
答案 1 :(得分:2)
如何使用count方法来计算字符串中整个字母中的任何字母?
wrd = 'Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...'
>>>> count = sum([''.join({_ for _ in wrd if _.isalpha()}).count(w) for w in wrd])
>>>> count
83
说明:使用列表推导获得set
中唯一字母计数的总和(在wrd
中)。
类似于:
count = []
set_w = set()
for w in wrd:
if w.isalpha():
set_w.add(w)
for w in set_w:
count.append(wrd.count(w))
print(sum(count))
答案 2 :(得分:1)
简短答案:您不是使用正则表达式,而是使用raw string literal,因此计算了字符串'[a-zA-Z]
的出现次数。>
因为格式r'..'
的字符串不是正则表达式,所以它是 raw 字符串 literal 。如果您写r'\n'
,则会写一个包含两个个字符的字符串:反斜杠和一个n
。 不是换行。原始字符串在正则表达式的上下文中很有用,因为正则表达式也使用了很多转义。
例如:
>>> r'\n'
'\\n'
>>> type(r'\n')
<class 'str'>
但是在这里,您需要计算字符串 '[a-zA-Z]'
出现的次数,除非您的spam_data['text'][0]
字面包含方括号[
,后跟{{ 1}}等,计数将为零。或如str.count [Python-doc]的文档中所述:
a
返回字符串
string.count(s, sub[, start[, end]])
中子字符串sub
的(不重叠)出现次数。s[start:end]
和start
的默认设置以及负值的解释与切片相同。)
如果字符串很大,并且您不想构造一个匹配列表,则可以使用以下方法计算元素的数量:
end
但是,通常简单地使用sum(1 for _ in re.finditer('[a-zA-Z]', 'mystring'))
然后计算元素数通常会更快。
答案 3 :(得分:1)
在这个:
spam_data['text'][0].count((r'[a-zA-Z]'))
count
通过字符串接受参数,不是正则表达式,这就是为什么它返回0的原因。
使用第二个示例。