我有来自this post的以下正则表达式:
\<([\w]+)([^\>]*?)(([\s]*\/\>)|(\>((([^\<]*?|\<\!\-\-.*?\-\-\>)|(?R))*)\<\/\1[\s]*\>))
此正则表达式匹配任何html
代码。
当我在RegExr和regex101上测试时,它可以正常工作。
然而,当我在Python中使用以下代码测试它时...
re.finditer('\<([\w]+)([^\>]*?)(([\s]*\/\>)|(\>((([^\<]*?|\<\!\-\-.*?\-\-\>)|(?R))*)\<\/\1[\s]*\>))', data):
...我收到此错误:unexpected end of pattern
。
有谁知道如何解决这个问题?
答案 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。