小白请教下python正则表达式findall()返回空值的问题?
求教大神看到正则表达式时候importrep=re.compile('([^}]*)',re.VERBOSE)p.findall('section{First}')‘结果...
求教大神看到正则表达式时候
import re
p= re.compile('([^}]*)',re.VERBOSE)
p.findall('section{First}')
‘结果是:’
['section{First', '', '']
实在想不明白为什么返回的结果后面有两个空的字符呢?难不成是section{First这里匹配了空的值}结束的这个位置又匹配了一次么?
如果是这样的话为什么开头的空值还有每个单子字母间的空值没有匹配呢? 展开
import re
p= re.compile('([^}]*)',re.VERBOSE)
p.findall('section{First}')
‘结果是:’
['section{First', '', '']
实在想不明白为什么返回的结果后面有两个空的字符呢?难不成是section{First这里匹配了空的值}结束的这个位置又匹配了一次么?
如果是这样的话为什么开头的空值还有每个单子字母间的空值没有匹配呢? 展开
2个回答
展开全部
星号表示匹配0到任意次,因此多了两个0长度的字符,因为'}'匹配非}的任意字符0次
改成至少一次就得到你期待的结果,就是把*改成+
改成至少一次就得到你期待的结果,就是把*改成+
更多追问追答
追问
为什么*匹配0次到任意次的时候会多两个0长度的字符呢?原因那我有点晕
我试了下 单独输入‘}’也就是 p.findall('}')会得到['', '']是不是这个意思,当出现‘}’符号的时候[^}]不匹配,就是没有也就是空,所以*这里就配了一次空字符‘’,但是另一个空字符‘’是怎么来的呢?是结尾的空么?
追答
你试试 p.findall(''),是不是会得到一个呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询