Python 为什么re.findall()在本例中返回空列表,而在另一例中返回带有空字符串的列表?
Python 为什么re.findall()在本例中返回空列表,而在另一例中返回带有空字符串的列表?,python,regex,Python,Regex,re.findall(r'[^-](*)$,'---')返回一个空列表[] 同时,re.findall(r'[^-](*)$,'----343')返回一个带有空字符串的列表[''] 这两种情况都不匹配。为什么re.findall()在第一种情况下返回一个空列表,而在第二种情况下返回一个空字符串的列表?$与该行的结尾匹配,该行没有字符。在第一种情况下,没有匹配项,因为行尾前面有一个破折号(-),您已经用[^-]对其进行了否定。在第二行中,行尾前面有一个与正则表达式匹配的非破折号字符。之所以这样做,
re.findall(r'[^-](*)$,'---')
返回一个空列表[]
同时,re.findall(r'[^-](*)$,'----343')
返回一个带有空字符串的列表['']
这两种情况都不匹配。为什么re.findall()在第一种情况下返回一个空列表,而在第二种情况下返回一个空字符串的列表?
$
与该行的结尾匹配,该行没有字符。在第一种情况下,没有匹配项,因为行尾前面有一个破折号(-
),您已经用[^-]
对其进行了否定。在第二行中,行尾前面有一个与正则表达式匹配的非破折号字符。之所以这样做,是因为当你说(*)
时,只要这些连字符跟在一个非-
的字符后面,你就匹配了零次或多次出现的-
。在第一个示例中,没有非-
的字符,因此没有匹配的字符,因此为空列表。在第二个示例中,有三个字符(数字)不是连字符,因此(*)
与最后一个3
匹配,然后-
的出现次数为零