J'essaie de vérifier une chaîne avec un motif à l'aide d'une regex avec Python sur une base de données SQLITE.
J'ai un problème quand j'essaie de la recherche de la chaîne de recherche "avec un paternel utilisant"
Pour l'exemple: je devrais \ "avant Regexp Autre moyen compilateur, n'aimez pas ... Erreur de syntaxe p> Quelqu'un sait faire comment faire Ce? P> My Regexp Fonction: Con.Create_function ("Regexp", 2, REGEXP) P> P>
3 Réponses :
Vous pouvez utiliser des échappes triple ou une chaîne brute.
Votre faire: p> Utilisez une chaîne brute, qui est un ou triple évasions ( r'string avec AR devant ' code>: p> \\\ code>): p>
Utilisez SQL paramétrée. Ensuite, vous n'avez pas besoin d'échapper aux citations vous-même:
Très bonne réponse! Aussi besoin de se protéger contre l'élément étant Aucun dans REGEXP (), E.G., la première ligne pourrait être "si l'article n'est pas: renvoyer false"
Un autre exemple de requête paramétrée ...
Pour la situation où vous devez fournir votre propre fonction de regex à la base de données - je suppose que python sqlite3 ne l'a pas toujours configuré par défaut. P>
Dans un autre exemple, la fonction de regex personnalisée compila la même expression pour chaque match. Il y a un moyen de contourner ça. L'exemple ci-dessous a également un commentaire au bas d'une autre façon de définir l'opération REGEX. P>
Vous pouvez vous contenter de compiler l'expression à chaque fois que l'expression est utilisée (pour chaque match) pour les requêtes traitantes. des données en créant une fonction personnalisée pour chaque requête et compilez l'expression uniquement une fois em>. Ci-dessous Self.Connonn est la connexion à la base de données et les CURS est un curseur de celui-ci. P> # Form an expression to match nicknames with the last 3 characters
# varying.
nick_expr = re.sub(r"[0-9_\-|]{0,3}$", r"[0-9_\-|]{0,3}$", nick)
nick_expr = re.compile(nick_expr, re.I)
# Create custom sqlite3 function using the compiled expression.
self._conn.create_function("NICKEXPR",
1,
lambda nick: nick_expr.match(nick) != None)
# Create temporary table from first pass query.
curs.execute(
""" CREATE TEMP TABLE temp_table1 AS
SELECT DISTINCT *
FROM users
WHERE NICKEXPR(nick)
OR host LIKE ?
OR (account<>'' AND account LIKE ?)
OR (address<>'' AND address=?)
""", (host, account, address))
# Set up the REGEXP operator/function for the sqlite3 database.
#self._conn.create_function(
# 'REGEXP', 2,
# lambda exp, item : re.find(exp, item) != None)
CAVEZER - Si plusieurs threads effectuent la même requête, redéfinir Nickexpr peut affecter la requête de l'autre thread.