Невозможно выполнить синтаксический анализ с помощью запроса sqlite с использованием регулярных выражений

#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 и никогда не будет истинным. Он не выполняет ни один из методов поиска по заданному шаблону.