这是对如何计算字符串中的字符的后续问题?并找出正则表达式在 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?
你应该使用str.count
而不是 count。
spam_data['text'].str.count('w')
0 83
Name: text, dtype: int64
要访问第一个值,请使用:
spam_data['text'].str.count('w')[0]
83
如何使用 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
说明:使用列表推导获取wrd
中唯一字母计数(set
内(的总和。
似:
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))
在这个:
spam_data['text'][0].count((r'[a-zA-Z]'))
count
按字符串而不是正则表达式接受参数,这就是它返回 0 的原因。
使用第二个示例。
简短回答:您没有使用正则表达式,而是使用原始字符串文字,因此计算字符串'[a-zA-Z]
的出现次数。
由于格式r'..'
的字符串不是正则表达式,因此它是原始字符串文本。如果你写r'n'
,你写一个包含两个字符的字符串:反斜杠和一个n
。不是新行。原始字符串在正则表达式的上下文中很有用,因为正则表达式也使用大量转义。
例如:
>>> r'n'
'\n'
>>> type(r'n')
<class 'str'>
但是在这里,您计算字符串'[a-zA-Z]'
出现的次数,除非您的spam_data['text'][0]
字面上包含一个方括号[
后跟a
等,否则计数将为零。或者按照str.count[Python-doc] 文档中的规定:
string.count(s, sub[, start[, end]])
返回字符串
s[start:end]
中子字符串sub
的(非重叠(出现次数。start
和end
的默认值以及负值的解释与切片的默认值相同。
如果字符串很大,并且您不想构造匹配列表,则可以使用以下方法计算元素的数量:
sum(1 for _ in re.finditer('[a-zA-Z]', 'mystring'))
但是,简单地使用re.findall(..)
然后计算元素的数量通常更快。