python - 奇怪的 python 正则表达式行为 - 可能连接到 unicode 或 sqlalchemy

标签 python regex sqlalchemy

我正在尝试在 sqlalchemy 结果中搜索模式(实际上是通过“like”或“op”(“regexp”)(模式)进行过滤,我认为它在某处植入了 regex)——字符串和搜索字符串都是希伯来语,大概是(也许我错了-)-unicode 其中 r = u'לבן'c = u'לבן, 한וד, ' 当我执行 re.search(r,c) 时,我得到了 SRE.match 对象 但是当我像这样查询数据库时:

f = session.query(classname)
c = f[0].color

c 给我:

'\xd7\x9c\xd7\x91\xd7\x9f,\xd7\x95\xd7\xa8\xd7\x95\xd7\x93,'

打印(c):

לבן,ורוד,

几乎相同,但运行 re.search(r,c) 没有匹配对象。

因为我怀疑是 unicode 问题,所以我尝试使用 unicode(c) 转换为 unicode 我得到一个'UnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd7:序号'我猜这意味着这已经是unicode字符串 - 那么这里的问题在哪里? 我更喜欢使用 sqlalchemy 'like' 但我在那里遇到了同样的问题 = 我肯定知道的地方(正如我在示例中显示的数据包含字符串)

我应该以某种方式转换搜索字符串、模式吗?这与unicode有关吗?还有别的吗?

数据库表(我正在查询)排序规则是 utf8_unicode_ci

最佳答案

c = f[0].color

不是返回一个 Unicode 字符串(或者它的 repr() 会显示一个 u'...' 类型的字符串),而是一个 UTF-8 编码的字符串.

尝试

c = f[0].color.decode("utf-8")

结果

u'\u05dc\u05d1\u05df,\u05d5\u05e8\u05d5\u05d3,'

u'לבן,ורוד,'

如果您的控制台可以显示希伯来语字符。

关于python - 奇怪的 python 正则表达式行为 - 可能连接到 unicode 或 sqlalchemy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987981/

相关文章:

javascript - Python/JavaScript - WebSockets 连接问题

python - 如何使用pandas使用zstandard压缩parquet文件

python - 无法从网页获取表格内的所有 pdf 链接

c++ - 简单的 C++ 正则表达式在 OSX 中出现运行时错误,但在 Windows 中

python - SQLAlchemy 获取查询结果的列数据类型

python - SQLAlchemy变量关系

python - 如何在Python 3中使用ipywidgets链接两个按钮的相反值?

c - 首先获取一个带空格的字符串,然后在制表符之后获取另一个字符串

javascript - 应用 regEx 后获取 javascript 数组中的值

python - Flask SQLAlchemy - 根据匹配的多对多对象的数量,按权重/分数对结果进行排序