Python正则表达式意外结束模式错误

时间:2018-04-06 08:37:27

标签: python regex

我有来自this post的以下正则表达式:

\<([\w]+)([^\>]*?)(([\s]*\/\>)|(\>((([^\<]*?|\<\!\-\-.*?\-\-\>)|(?R))*)\<\/\1[\s]*\>))

此正则表达式匹配任何html代码。

当我在RegExrregex101上测试时,它可以正常工作。

然而,当我在Python中使用以下代码测试它时...

re.finditer('\<([\w]+)([^\>]*?)(([\s]*\/\>)|(\>((([^\<]*?|\<\!\-\-.*?\-\-\>)|(?R))*)\<\/\1[\s]*\>))', data):

...我收到此错误:unexpected end of pattern

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

该模式使用(?R)递归模式修饰符,Python re模块不支持该模式。

您必须安装regex project,而它确实支持它。

此外,您可能希望使用r原始字符串文字,以确保Python编译器不直接解释这些反斜杠(在这种特定情况下它没有区别):

>>> import regex
>>> regex.compile(r'\<([\w]+)([^\>]*?)(([\s]*\/\>)|(\>((([^\<]*?|\<\!\-\-.*?\-\-\>)|(?R))*)\<\/\1[\s]*\>))')
regex.Regex('\\<([\\w]+)([^\\>]*?)(([\\s]*\\/\\>)|(\\>((([^\\<]*?|\\<\\!\\-\\-.*?\\-\\-\\>)|(?R))*)\\<\\/\\1[\\s]*\\>))', flags=regex.V0)

但是,如果您要安装第三方库,请安装BeautifulSoup,并使用正确的HTML解析器来解析HTML。