[编辑]:
我知道正则表达式不是用来解析 XML 的,但我的问题是为什么在 Python 中不能编译正则表达式。
我期待关于在那个正则表达式中什么不起作用而不是为什么使用它不是一个好主意的答案(我不明白反对票)。
[/编辑]
我正在尝试根据此文档编写一个逃避 XML 标记竞争的函数,我认为最好的解决方案是逃避所有不在 CDATA 部分中的“<”和“&”。
我对正则表达式有基本的了解,所以我环顾四周,发现了这一页和这一页。
显然,与“&”一起使用的正则表达式是:
&(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\d+);)(?!(?>(?:(?!<!\[CDATA\[|\]\]>).)*)\]\]>)
但它在 python 中不起作用,事实上,如果我尝试使用它,我有:
In [1]: import re
In [2]: x = re.compile('&(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\d+);)(?!(?>(?:(?!<!\[CDATA\[|\]\]>).)*)\]\]>)')
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-2-2884ec1d2f4e> in <module>()
----> 1 x = re.compile('&(?!(?:[a-zA-Z][a-zA-Z0-9]*|#\d+);)(?!(?>(?:(?!<!\[CDATA\[|\]\]>).)*)\]\]>)')
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in compile(pattern, flags)
188 def compile(pattern, flags=0):
189 "Compile a regular expression pattern, returning a pattern object."
--> 190 return _compile(pattern, flags)
191
192 def purge():
/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in _compile(*key)
243 p = sre_compile.compile(pattern, flags)
244 except error, v:
--> 245 raise error, v # invalid expression
246 if len(_cache) >= _MAXCACHE:
247 _cache.clear()
error: unexpected end of pattern
这让我觉得那个正则表达式不是为python编写的。
有什么帮助吗?