Краткий ответ : вы не использовали регулярное выражение, а необработанный строковый литерал и, таким образом, рассчитали вхождения строки '[a-zA-Z]
.
Поскольку строка формата r'..'
является , а не регулярным выражением, это raw string литерал .Если вы пишете r'\n'
, вы пишете строку с двумя символами: обратной косой чертой и n
. не новая строка.Необработанные строки полезны в контексте регулярных выражений, потому что регулярные выражения также используют много экранирующих символов.
Например:
>>> r'\n'
'\\n'
>>> type(r'\n')
<class 'str'>
Но здесь вы, таким образом, подсчитываете, сколько раз string '[a-zA-Z]'
, и если ваш spam_data['text'][0]
буквально не содержит квадратную скобку [
, за которой следует a
и т. д., счет будет равен нулю.Или как указано в документации str.count [Python-doc] :
string.count(s, sub[, start[, end]])
Возвращает количество (не перекрывающихся) вхождений подстроки sub
в строке s[start:end]
.Значения по умолчанию для start
и end
и интерпретация отрицательных значений такие же, как для срезов.)
В случае, если строка достаточно велика, и вы не хотите создавать список совпаденийВы можете посчитать количество элементов с помощью:
sum(1 for _ in re.finditer('[a-zA-Z]', 'mystring'))
Однако обычно проще просто использовать re.findall(..)
и затем вычислить количество элементов.