为什么赢了';我的Python正则表达式锚在多行字符串上是否正常工作?

为什么赢了';我的Python正则表达式锚在多行字符串上是否正常工作?,python,regex,string,Python,Regex,String,我正在写一个脚本来清理从PDF转换而来的文本文件。由于某些原因,锚定字符^和$(匹配字符串的开头和结尾)在我的正则表达式中似乎无法正常工作。我正在Linux上使用Python 3.6.6 为什么^Credits$与下面代码中的独立行Credits不匹配 >>> import re >>> my_regex = r'^Credits$' >>> my_string = "based upon extrinsic circumstances, a

我正在写一个脚本来清理从PDF转换而来的文本文件。由于某些原因,锚定字符
^
$
(匹配字符串的开头和结尾)在我的正则表达式中似乎无法正常工作。我正在Linux上使用Python 3.6.6

为什么
^Credits$
与下面代码中的独立行
Credits
不匹配

>>> import re
>>> my_regex = r'^Credits$'
>>> my_string = "based upon extrinsic circumstances, as discussed in Serrano v. Priest, 20 Cal.3d 25, 49.\n\nCredits\n(Added by Stats.1977, c. 1197, p. 3979,  1. Amended by Stats.1993, c. 645 (S.B.764),  2.)"
>>> print(re.findall(my_regex,my_string))
[]
下面是print()函数显示的文本片段(
my_string
):

based upon extrinsic circumstances, as discussed in Serrano v. Priest, 20 Cal.3d 25, 49.

Credits
(Added by Stats.1977, c. 1197, p. 3979,  1. Amended by Stats.1993, c. 645 (S.B.764),  2.)
谢谢您的帮助。

如前所述,使用
findall
末尾的
re.M
标志:

print(re.findall(my_regex,my_string,re.M))
演示:

>>> import re
>>> my_regex = r'^Credits$'
>>> my_string = "based upon extrinsic circumstances, as discussed in Serrano v. Priest, 20 Cal.3d 25, 49.\n\nCredits\n(Added by Stats.1977, c. 1197, p. 3979,  1. Amended by Stats.1993, c. 645 (S.B.764),  2.)"
>>> print(re.findall(my_regex,my_string,re.M))
['Credits']
或与
r'(?m)^Credits$”一起使用

>>> import re
>>> my_regex = r'(?m)^Credits$'
>>> my_string = "based upon extrinsic circumstances, as discussed in Serrano v. Priest, 20 Cal.3d 25, 49.\n\nCredits\n(Added by Stats.1977, c. 1197, p. 3979,  1. Amended by Stats.1993, c. 645 (S.B.764),  2.)"
>>> print(re.findall(my_regex,my_string,re.M))
['Credits']

默认情况下,
^
$
仅匹配字符串的开头和结尾。只有使用
m
标志,它们才能匹配行的开头和结尾。@CertainPerformance Nice;成功了。因此,解决方案是使用
my_regex=r'(?m)^Credits$'
。如果你想贴出来,我会接受你的回答。现在我对Python中的
^
\A
$
\Z
之间的区别感到困惑。我原以为,给定一个多行字符串,
^
$
将匹配行的开头和结尾,而
\a
\Z
将匹配整个字符串的开头和结尾。这些运算符在多行模式之外是否冗余?