正确转义字符串中的引号

时间:2014-11-12 03:34:32

标签: python regex string

我有这个正则表达式,据说是检测HTML标签的全部结果。我在这里找到了它:

http://haacked.com/archive/2004/10/25/usingregularexpressionstomatchhtml.aspx/

原始正则表达式如下:

</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>

当我在它周围添加单引号时,它变为:

'</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>'

但这会将内部('.\*?')作为与我想要制作的字符串不同的实体。任何想法如何解决这一问题?逃避那些内在的引号。*?因为我在扫描字符串错误时获得了EOL,所以似乎没有帮助

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用双引号引用整个正则表达式。

>>> obj = re.compile(r"</?\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)/?>")
>>> obj.pattern
'</?\\w+((\\s+\\w+(\\s*=\\s*(?:\\".*?\\"|\'.*?\'|[^\'\\">\\s]+))?)+\\s*|\\s*)/?>'

注意我已将正则表达式中的双引号转义为\"