我在python sqlite3中为正则表达式做了一个简单的替换实现:
import sqlite3, re
db = sqlite3.connect(':memory:')
c = db.cursor()
c.executescript("""
create table t2 (n REAL, v TEXT, t TEXT);
insert into t2 VALUES (6, "F", "ef");
insert into t2 VALUES (1, "A", "aa");
insert into t2 VALUES (2, "B", "be");
insert into t2 VALUES (4, "D", "de");
insert into t2 VALUES (5, "E", "ee");
insert into t2 VALUES (3, "C", "ze");
""");
db.commit()
def preg_replace(string, pattern, replace):
return re.sub(pattern, replace, string)
db.create_function('replace',1,preg_replace)
c = db.cursor()
# This does not do anything
c.execute("UPDATE t2 SET t=replace(t,?,?)",('e$','ee'))
db.commit()
c = db.cursor()
c.execute("select * from t2")
print c.fetchall()
// This makes 'be' to 'bee'
print preg_replace("be","e$","ee")
我现在的问题是我的UPDATE命令不会替换表条目末尾的'e' 如果我只使用'e'作为模式,它就可以正常工作('be'最终成为'bee') 如果我手动将表格中的“be”更改为“be $”,则会将其修改为“bee”。
但是,如果我直接使用preg_replace函数,我可以替换字符串末尾的'e'。
我不明白为什么。当我的用户定义函数的输入转到sqlite时,是否有一些字符串转义?非常感谢。
PS:运行Python 2.7.3