Python正则表达式-为什么字符串结尾($和\ Z)无法与组表达式一起使用?

发布于 2021-01-29 17:45:51

在Python 2.6中。似乎字符串末尾的那个标记$\Z不符合组表达式兼容。佛的例子

import re
re.findall("\w+[\s$]", "green pears")

退货

['green ']

(因此$实际上无效)。并使用

re.findall("\w+[\s\Z]", "green pears")

导致错误:

/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc in findall(pattern, string, flags)
    175 
    176     Empty matches are included in the result."""
--> 177     return _compile(pattern, flags).findall(string)
    178 
    179 if sys.hexversion >= 0x02020000:

/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: internal: unsupported set operator

为什么这样工作以及如何解决?

关注者
0
被浏览
44
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    [..]表达式是一个 字符组
    ,这意味着它会匹配任何一个字符包含在其中。因此,您正在匹配文字$字符。字符组始终适用于一个输入字符,因此永远不能包含锚点。

    如果要匹配空格字符 字符串的结尾,请改用非捕获组,将其与|或选择器结合使用:

    r"\w+(?:\s|$)"
    

    或者,查看\b单词边界锚点。它会匹配\w组开始或结束的任何位置(因此,它会锚定到文本中\w字符之前或之后的\W字符,或者字符串的开始或结尾的点)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看