小白请教下python正则表达式findall()返回空值的问题?

求教大神看到正则表达式时候
import re
p= re.compile('([^}]*)',re.VERBOSE)
p.findall('section{First}')
‘结果是:’
['section{First', '', '']

实在想不明白为什么返回的结果后面有两个空的字符呢?难不成是section{First这里匹配了空的值}结束的这个位置又匹配了一次么?
如果是这样的话为什么开头的空值还有每个单子字母间的空值没有匹配呢?
最新回答
倾城一夜雪

2024-10-14 07:10:52

星号表示匹配0到任意次,因此多了两个0长度的字符,因为'}'匹配非}的任意字符0次
改成至少一次就得到你期待的结果,就是把*改成+
追问
为什么*匹配0次到任意次的时候会多两个0长度的字符呢?原因那我有点晕
我试了下 单独输入‘}’也就是 p.findall('}')会得到['', '']是不是这个意思,当出现‘}’符号的时候[^}]不匹配,就是没有也就是空,所以*这里就配了一次空字符‘’,但是另一个空字符‘’是怎么来的呢?是结尾的空么?
追答
你试试 p.findall(''),是不是会得到一个呢?
追问
会得到一个[‘’]
追答
就是这个意思咯,0长度的字符串仍然会返回一个匹配,这就是会多出两个空匹配的原因。
追问
那最后一个产生的空0长度字符串      是不是就是'}'后面的空字符呢
追答
你可以理解为'}'后面有一个''
追问
你好 我还有有点迷惑,
看结果
第一次匹配到'section{First'
第二次匹配到的是''这个空是怎么匹配的呢?是如何产生的呢'section{First}'匹配完'section{First'的时候匹配位置就应该移动到'}'字符了啊,这个字符是不匹配的不应该又返回结果的啊
第三次匹配到的也是''这个空您也说了我可以理解为'}'后面有一个''主要是第二个空怎么产生的呢
心里纳凉

2024-10-14 06:05:39

pic
=
requests.get(each)是发送请求到服务器,服务器返回(图片)的二进制数据流,
fp.write(pic.content)就是把图片的二进制数据存到本地文件,也就是保存图片