正则表达式中$与\Z匹配差异疑问:为何匹配到fly\n?
为什么$会匹配到'fly\n'?
首先得纠正一个常见误解:Python的re模块中,即使不开启多行模式(re.MULTILINE),$的匹配规则也不是只匹配字符串的绝对末尾——它会匹配两种位置:
- 字符串的最后一个字符之后
- 字符串末尾的换行符
\n之前的位置
回到你的例子,字符串'fly\n'的结构是f-l-y-\n,$会匹配到y和\n之间的位置。正则表达式r"^den|ly$"中的ly$部分,正好能匹配字符串里的ly加上这个$的位置,所以整个'fly\n'会被匹配到。
而\Z的规则是严格匹配字符串的绝对末尾,也就是\n之后的位置。'fly\n'里ly的后面是\n,不是字符串的绝对末尾,所以ly\Z无法匹配这个字符串,只会匹配不带换行的'fly'。
内容的提问来源于stack exchange,提问作者ver_roh
相关产品推荐
相关产品推荐

