Python正则表达式中findall返回列表中包含空字符串

查看:1236
本文介绍了Python正则表达式中findall返回列表中包含空字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

使用re.findall()查找字符串,使用了$标识查找到字符串结尾,但是返回的list中最后一个元素为空字符串

s = 'ABCD'
m = re.findall(r'.*$', s)
if m:
    print(m)

# output ['ABCD', '']

为什么在第一次已经匹配到字符串结尾$的情况下,findall没有停止还做了一次匹配?而相比^就没有在开始处^多做一次这样的查找:

s = 'ABCD'
m = re.findall(r'^.*', s)
if m:
    print(m)
# output ['ABCD'] 

解决方案

别的语言也是这样

js

'ABCD'.match(/.*$/g)
["ABCD", ""]
'ABCD'.match(/^.*/g)
["ABCD"]


python3

>>> re.findall(r'.*\b', 'ABCD')
['ABCD', '']
>>> re.findall(r'.*(?=$)', 'ABCD')
['ABCD', '']
>>> re.findall(r'.{0,}(?=$)', 'ABCD')
['ABCD', '']

\b、^、$、(?=exp)

这几个是零宽断言,只匹配位置,不消耗字符。

位置之后的零个字符''正好符合.*

这篇关于Python正则表达式中findall返回列表中包含空字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆