在正则表达式中容纳两种类型的引号

Dex*_*ter 5 python regex quotes double-quotes

我正在使用正则表达式来替换输入字符串中的引号。我的数据包含两种“类型”的引号 -

\n\n
" and \xe2\x80\x9c\n
Run Code Online (Sandbox Code Playgroud)\n\n

两者之间有非常微妙的区别。目前,我在正则表达式中明确提及这两种类型

\n\n
\\"*\\\xe2\x80\x9c*\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我担心在未来的数据中我可能会得到不同的“类型”引用,而我的正则表达式可能会失败。存在多少种不同类型的报价?有没有办法将它们标准化为一种类型,以便我的正则表达式不会因为看不见的数据而中断?

\n\n

编辑-

\n\n

我的输入数据由 HTML 文件组成,我将 HTML 实体和 URL 转义为 ASCII

\n\n
escaped_line = HTMLParser.HTMLParser().unescape(urllib.unquote(line.decode(\'ascii\',\'ignore\')))\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 line 指定 HTML 文件中的每一行。我需要“忽略”ASCII,因为数据库中的所有文件都没有相同的编码,并且在读取文件之前我不知道编码。

\n\n

编辑2

\n\n

我无法使用替换功能来执行此操作。我尝试了 Replace(\'"\',\'\') 但它不会替换其他类型的引号 \'\xe2\x80\x9c\'。如果我将其添加到另一个替换函数中,它会抛出 NON -ASCII 字符错误。

\n\n

健康)状况

\n\n

不允许使用外部库,只能使用本机 python 库。

\n

Dex*_*ter 0

事实证明有一种更简单的方法可以做到这一点。只需在您用 python 编写的正则表达式前面附加文字 \'u\' 即可。

\n\n
regexp = ru\'\\"*\\\xe2\x80\x9c*\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

当您想要将正则表达式与字符串进行编译/搜索/匹配时,请确保使用 re.UNICODE 标志。

\n\n
re.findall(regexp, string, re.UNICODE)\n
Run Code Online (Sandbox Code Playgroud)\n\n

不要忘记包括

\n\n
#!/usr/bin/python\n# -*- coding:utf-8 -*-\n
Run Code Online (Sandbox Code Playgroud)\n\n

位于源文件的开头,以确保可以在源文件中写入 unicode 字符串。

\n