正则表达式内部查找与正则表达式内部计数



这是对如何计算字符串中的字符的后续问题?并找出正则表达式在 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的(非重叠(出现次数。startend的默认值以及负值的解释与切片的默认值相同。

如果字符串很大,并且您不想构造匹配列表,则可以使用以下方法计算元素的数量:

sum(1 for _ in re.finditer('[a-zA-Z]', 'mystring'))

但是,简单地使用re.findall(..)然后计算元素的数量通常更快。

最新更新