为什么这会让我[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))
答案 0 :(得分:1)
当anchor或word boundary放入character class时,他们会失去特殊意义。加。到re
documentation:
[]
用于表示一组字符。
和
\b
...在字符范围内,\b
表示退格字符,以便与Python的字符串文字兼容。
\Z
的行为与\b
的行为相同:在字符类中,锚意义丢失。请注意,r'\Z'
在3.6之前的Python版本中不会产生任何警告,并且与单个Z
匹配,因为它是Python的unknown escape:
\j
之类的未知逃脱将一个人留下。
从Python 3.6开始,你不能使用带有ASCII字母的\
作为未知的转义(参见reference):
在版本3.6中更改:包含
'\'
和ASCII字母的未知转义现在是错误。
因此,Python中的r'[\Z]'
(最多3.5)将按如下方式工作:
import re
print(re.findall(r'[\Z]', '\\Z')) # => ['Z']
要匹配(字符串)字母或零宽度断言,请使用grouping construct,捕获(...)
或不捕获{{1 {}有alternation operator (?:...)
:
|
这将匹配换行符号,或者字符串的最后一行(在Python中,(?:\n|\Z)
匹配PCRE / Perl / .NET中与\Z
相同的字符串位置。
答案 1 :(得分:0)
s='''ABC'''
# use findall to return the parts we want
print(re.findall(r'ABC[\Z]', s))
error: bad escape \Z at position 4
此代码将返回错误。
关于角色类有一些规则:
[(+*)]
将匹配任何文字字符'(', '+', '*', or ')'
。在角色类中发生的事情是:正则表达式引擎试图逃避字母Z
。由于Z
不是正则表达式中的特殊字符,因此引擎将返回错误。