来自PGSQL的UTF-8内容的re.sub()问题

时间:2013-10-02 23:22:46

标签: python regex postgresql encoding utf-8

我尝试了许多不同的东西,并查看了许多SO答案(以及来自其他网站的东西),我似乎无法想出这个。那里有很多相互矛盾的信息。

我有一些内容存储在PostgreSQL中,UTF8(SET client_encoding ='UTF8';)。我从数据库中提取所述内容,然后在一个范围内包装任何“£”符号。

相关摘要:

for i in range(0, len(results)):
  content = results[i][2].decode('utf8')
  pattern = re.compile(ur'(\u00A3[0-9]+)(\.[0-9]{1,2})?', re.UNICODE)
  content = re.sub(pattern, '<span class="price">\0\1</span>', content)
  app.logger.debug(test)

示例输出:

DEBUG in **** [****.py:143]:
Prices from only <span class="price"></span> for a framed picture.
编辑:我知道REGEXP可能不好。

1 个答案:

答案 0 :(得分:1)

尝试使用capturing/named group in regex首先检查正则表达式是否正在使用常规标题,然后仅包装您需要的内容或删除您需要的内容:

for i in range(0, len(results)):
  pattern = re.compile('[0-9]*(?P<todelete>\W)?')
  todelete = pattern.match(i[0][2]).group('todelete')
  content = todelete.sub("", i[0][2])

顺便从posgresql中提取信息,我建议psycopg2在一个简单的列表中正确地获取一个或多个结果并尊重一般编码:这应该可以避免很多麻烦。