小白求助大神python中findall()和sub()的结果

import re
p = re.compile('([^}]*)',re.VERBOSE)
p.findall('section{First}')
第一个问题:
为什么结果是:['section{First', '', ''] 这里面的'',''是哪来的?
第二问题
p.sub(r'subsection{}','section{First}')的结果为什么是
'subsection{}subsection{}}subsection{}'

第三个问题
p.sub(r'subsection{\1}','section{First}')的结果为什么是
'subsection{section{First}subsection{}}subsection{}'

第一个问题,你搞错了,不是逗号,是两个空字符串,返回的结果列比里其实有三个元素。虽然看起来很像两个。所以,它找到了符合条件的三个对象,也就是['section{First', '', ''] 。右大括号的位置是理解的关键。

第二个问题。sub方法是用你指定的字符串替换‘匹配’上的字符串。前面我们匹配上了3个位置,将它们逐一替换,就得到了'subsection{}subsection{}}subsection{}'。注意其中那个蹦单的右大括号。

第三个问题。你使用了sub的分组引用功能。它在替换的同时会用匹配上的内容替换‘\1’。你在前面匹配上了一个字符串和两个空格,将它们依次代入问题二结果中的三对大括号就能得到最终结果'subsection{section{First}subsection{}}subsection{}'

更多内容参考正则表达式和re模块

追问

而p = re.compile('([^}]*)',re.VERBOSE)
p.findall('section{First}')却是['section{First', '', ''] ,把后面出两个空,前面没有

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-03-04

    为了回答方便建议你分开提问

    问“为什么是”,建议增加“你自己认为结果应该是什么”