【发布时间】:2012-04-09 06:20:48
【问题描述】:
我正在使用正则表达式替换输入字符串中的引号。我的数据包含两种“类型”的引号 -
" and “
两者之间有一个非常微妙的区别。目前,我在我的正则表达式中明确提到了这两种类型
\"*\“*
我担心在未来的数据中我可能会得到一个不同的“类型”的引用,我的正则表达式可能会失败。存在多少种不同类型的报价?有没有办法将这些规范化为一种类型,这样我的正则表达式就不会因看不见的数据而中断?
编辑 -
我的输入数据由 HTML 文件组成,我将 HTML 实体和 URL 转义为 ASCII
escaped_line = HTMLParser.HTMLParser().unescape(urllib.unquote(line.decode('ascii','ignore')))
其中 line 指定 HTML 文件中的每一行。我需要“忽略”ASCII,因为我数据库中的所有文件都没有相同的编码,而且在读取文件之前我不知道编码。
编辑2
我无法使用替换功能这样做。我尝试了 replace('"','') 但它不能替换其他类型的引号 '"'。如果我将它添加到另一个替换函数中,它会抛出非 ASCII 字符错误。
条件
不允许使用外部库,只能使用本机 python 库。
【问题讨论】:
-
替换引号几乎不是正则表达式的任务。我会得到一个(unicode?)引号列表并做一个普通的
replace。 -
@Lev Levitsky,unicode 究竟如何在这里工作?我无法使用替换功能这样做。我尝试了 replace('"','') 但它不能替换其他类型的引号 '“'。如果我将它添加到另一个替换函数中,它会抛出非 ASCII 字符错误。我是 unicode 的新手。
-
看起来您对
urllib.unquote的调用遇到了以下尚未解决的 Python 错误:bugs.python.org/issue8136 -
@Abel 在这种情况下我该怎么办?
-
@mcenley:您正在转义 HTML,就好像它是一个 URL。也许你根本不需要逃避。考虑将 HTML 读取为 UTF-8(它可能已经是,或者在源代码处修复它),这样您就不需要任何转义。
标签: python regex quotes double-quotes