正则表达式可在Python3.5.2(而非3.7.4)中运行

我正在使用在网上找到的经过修改的库来解析.stl文件。到目前为止,在非Anaconda Python 3.5.2中,它的运行非常出色。我最近不得不升级到Anaconda Python3.7.4。以下行在3.5中工作正常,但在3.7.4中抛出异常

re.compile(r'[-+]?[0-9]*\.?[0-9]+(\e[-+]?[0-9]+)?')

这是什么原因?
例外是:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-2-08df04adea1a> in <module>
----> 1 re.compile(r'[-+]?[0-9]*\.?[0-9]+(\e[-+]?[0-9]+)?')

~/anaconda3/lib/python3.7/re.py in compile(pattern,flags)
    232 def compile(pattern,flags=0):
    233     "Compile a regular expression pattern,returning a Pattern object."
--> 234     return _compile(pattern,flags)
    235 
    236 def purge():

~/anaconda3/lib/python3.7/re.py in _compile(pattern,flags)
    284     if not sre_compile.isstring(pattern):
    285         raise TypeError("first argument must be string or compiled pattern")
--> 286     p = sre_compile.compile(pattern,flags)
    287     if not (flags & DEBUG):
    288         if len(_cache) >= _MAXCACHE:

~/anaconda3/lib/python3.7/sre_compile.py in compile(p,flags)
    762     if isstring(p):
    763         pattern = p
--> 764         p = sre_parse.parse(p,flags)
    765     else:
    766         pattern = None

~/anaconda3/lib/python3.7/sre_parse.py in parse(str,flags,pattern)
    928 
    929     try:
--> 930         p = _parse_sub(source,pattern,flags & SRE_flaG_VERBOSE,0)
    931     except Verbose:
    932         # the VERBOSE flag was switched on inside the pattern.  to be

~/anaconda3/lib/python3.7/sre_parse.py in _parse_sub(source,state,verbose,nested)
    424     while True:
    425         itemsappend(_parse(source,nested + 1,--> 426                            not nested and not items))
    427         if not sourcematch("|"):
    428             break

~/anaconda3/lib/python3.7/sre_parse.py in _parse(source,nested,first)
    814             sub_verbose = ((verbose or (add_flags & SRE_flaG_VERBOSE)) and
    815                            not (del_flags & SRE_flaG_VERBOSE))
--> 816             p = _parse_sub(source,sub_verbose,nested + 1)
    817             if not source.match(")"):
    818                 raise source.error("missing ),unterminated subpattern",~/anaconda3/lib/python3.7/sre_parse.py in _parse_sub(source,first)
    505 
    506         if this[0] == "\\":
--> 507             code = _escape(source,this,state)
    508             subpatternappend(code)
    509 

~/anaconda3/lib/python3.7/sre_parse.py in _escape(source,escape,state)
    400         if len(escape) == 2:
    401             if c in ASCIILETTERS:
--> 402                 raise source.error("bad escape %s" % escape,len(escape))
    403             return LITERAL,ord(escape[1])
    404     except ValueError:

error: bad escape \e at position 21
tjdeng1204 回答:正则表达式可在Python3.5.2(而非3.7.4)中运行

您遇到的问题是由于您添加了\e的转义序列。将其更改为e将解决您的问题。

那么从python 3.5.2升级到python 3.7.4之后为什么会发生这种情况?

非常感谢Wiktor在this question下的注释中指出了正确的方向。

根据What's new in Python 3.7 - API and Feature Removals

  

\和替换的ASCII字母组成的未知转义   re.sub()的模板在Python 3.5中已弃用,现在将   导致错误

3.7 - Regular Expression Syntax(该部分的最后一行)中也有注明:

  

在3.6版中进行了更改:由'\'和ASCII组成的未知转义   字母现在是错误。


您还可以在The “\z” anchor not working in Python regex上看到另一个具有类似信息的答案(由Wiktor提供)。

本文链接:https://www.f2er.com/3093959.html

大家都在问