gpt4 book ai didi

regex - 关于正则表达式中的\Z

转载 作者:行者123 更新时间:2023-12-04 17:53:15 28 4
gpt4 key购买 nike

为什么这会返回我 [ABC]

s='''ABC'''
# use findall to return the parts we want
print(re.findall(r'ABC\Z', s))

虽然这不会给我任何返回?

s='''ABC'''
# use findall to return the parts we want
print(re.findall(r'ABC[\Z]', s))

最佳答案

根本原因

当一个 anchorword boundary被放入 character class他们失去了他们的特殊意义。累积到 re documentation :

[]
       Used to indicate a set of characters.

\b
       ... Inside a character range, \b represents the backspace character, for compatibility with Python’s string literals.

\Z 的行为方式与 \b 相同:在字符类中, anchor 意义丢失。请注意 r'\Z' 在 3.6 之前的 Python 版本中不会产生任何警告并且匹配单个 Z 因为它是 unknown escape对于 Python 回复:

Unknown escapes such as \j are left alone.

从 Python 3.6 开始,您不能使用 \ 后跟 ASCII 字母,这是未知的转义(参见 reference ):

Changed in version 3.6: Unknown escapes consisting of '\' and an ASCII letter now are errors.

因此,r'[\Z]' 在 Python 3.5 之前将按如下方式工作:

import re
print(re.findall(r'[\Z]', '\\Z')) # => ['Z']

解决方案

要匹配一个(串)字母一个零宽度断言,使用grouping construct ,捕获 (...) 或非捕获 (?:...),带有 alternation operator |:

(?:\n|\Z)

这将匹配换行符或字符串的末尾(在 Python 中,\Z 匹配字符串中与 PCRE/Perl 中的 \z 相同的位置/.NET).

关于regex - 关于正则表达式中的\Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42616841/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com