[求助] 正则表达式匹配 IP 地址的问题求助

需求:
有一个列表,表中元素包含IP地址,空元素,文字。想从这个列表中匹配出特定规律的IP地址,列表见下图

testip = [‘’, ‘’, ‘’, ‘IP(30位)’, ‘’, ‘24.45.127.2’, ‘24.45.127.6’, ‘24.45.127.10’, ‘24.45.127.14’, ‘24.45.127.18’,
‘24.45.127.22’, ‘24.45.126.6’, ‘24.45.126.10’,’24.45.126.138’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘备注’, ‘’, ‘’, ‘’, ‘’,
‘IP(24位)’, ‘’, ‘’, ‘’,’’, ‘’, ‘IP(30位)’, ‘24.44.116.253’, ‘24.44.116.10’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’, ‘’,
‘’, ‘’, ‘’, ‘’, ‘’, ‘’]

想要匹配的IP的特定规律是:从列表的第一个IP开始,直到出现空元素结束。

之前有个热心大佬帮忙给写了一个表达式匹配,我也验证成功啦,但是有几个点没有搞明白(小白,研究了几天也没找到相关资料),表达式如下:

IP_new_list = re.findall(r’(?<=,,)(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}.*?)(?=,,)’,’,’.join(testip))[0].split(‘,’)

表达式已经验证,可以满足需求,但是表达式中开头的(?<=,,)和结束的(?=,,)没明白啥意思,各位大神帮忙指点下,多谢

当前的理解是这两个分组是用于匹配从哪里开始匹配,从哪里结束匹配的,这里里两个逗号可以匹配空元素吗??

IP
讨论数量: 3
Jason990420

(?=...) 向前断言, 解析器当前位置之后的内容必须匹配 ...

(?<=...) 肯定向后断言, 解析器当前位置之前的内容必须匹配 ...

像锚一样,先行断言和向后断言都是零宽度断言,因此它们不占用任何搜索字符串。同样,即使它们包含括号并执行分组,它们也不会捕获匹配的内容。

... 可使用正则表达式

3年前 评论

我不理解的是,他这个表达式是怎么匹配到第一个IP开始,然后到第一个空元素结束的

3年前 评论
Jason990420

取字符串中以两个逗号开始,一个IP定位开始,直到找到两个逗号

(?<=,,) 
开始为两个逗号
(
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
四个数字以句点分隔, 每个数字为13位数
.*?
取任意字不限个数, 不多取
)
(?=,,) 
以两个逗号结束

字符串

,,,IP30 位),,24.45.127.2,24.45.127.6,24.45.127.10,24.45.127.14,24.45.127.18,24.45.127.22,24.45.126.6,24.45.126.10,24.45.126.138,,,,,,备注,,,,,IP24 位),,,,,,IP30 位),24.44.116.253,24.44.116.10,,,,,,,,,,,,,,,,,,

能符合的就只有只有以下这一段,去掉前后的两个逗号,列表中只有一个,所以取索引0,再以逗号分割出所有的IP

,,24.45.127.2,24.45.127.6,24.45.127.10,24.45.127.14,24.45.127.18,24.45.127.22,24.45.126.6,24.45.126.10,24.45.126.138,,
3年前 评论
m0618 (楼主) 3年前
Jason990420 (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!