#python #regex #sqlite
#питон #регулярное выражение #sqlite #python
Вопрос:
Я пытаюсь найти способ выполнить итерацию по базе данных и сопоставить все строки, в которых есть 02, используя регулярные выражения. При обнаружении совпадения счетчик должен быть сброшен на 0, а при отсутствии совпадения счетчик должен накапливаться с отрицательным значением 1. Код работает, когда я использую список.
import sqlite3
import re
conn = sqlite3.connect('p34.db')
c = conn.cursor()
r = re.compile(r'b[5-9]*(?:0[5-9]?2|2[5-9]?0)[5-9]*b')
q = "SELECT Number FROM 'Pick 3'"
c.execute(q)
rez = c.fetchall()
count = 0
for i in rez:
if i == r:
count = 0
else:
count = count -1
print(count)
conn.close()
print (rez)
Комментарии:
1.
i == r
недопустимо для сопоставления регулярных выражений. Здесь вам нужно использовать методы регулярных выражений, такие как search .
Ответ №1:
Вероятно, вы хотите использовать r.search()
для выполнения поиска по регулярным выражениям:
for i in rez:
if r.search(i[0]):
count = 0
else:
count -= 1
Обратите внимание на использование i[0]
для получения первого значения из каждого кортежа, возвращаемого запросом.
Использование i == r
просто сравнивает кортеж i
(возвращаемый запросом) с скомпилированным шаблоном регулярного выражения r
и никогда не будет истинным. Он не выполняет ни один из методов поиска по заданному шаблону.