其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

Python,关于正则表达式中findall()问题。自学Python,碰到这个例子想了好久

GG网络技术分享 2025-03-18 16:14 3


问题描述:


对一个IP地址的匹配字符串。
自己的想法是,[1-9]{1,3}匹配其中的'127',(.[0-9]{1,3}){3}匹配后面的‘.0.0.1’
但如果采用r'[1-9]{1,3}.[0-9].[0-9].[0-9]'就能匹配到‘127.0.0.1’
不知道为什么输出会多出一个‘.1‘
希望能得到解答

网友观点:

应该是这样进行匹配

import re

ip ='192.168.1.1'

trueIp =re.search(r'(([01]{0,1}\\d{0,1}\\d|2[0-4]\\d|25[0-5])\\.){3}([01]{0,1}\\d{0,1}\\d|2[0-4]\\d|25[0-5])',ip)

print(trueIp)

而findall这个函数

findall(string[, pos[, endpos]])

是在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
string : 待匹配的字符串。
pos : 可选参数,指定字符串的起始位置,默认为 0。
endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

>>> str1 = '127.0.0.1 192.168.1.1 256.256.0.0'>>> pattern = re.compile(r"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))")>>> pattern.findall(str1)

['127.0.0.1', '192.168.1.1']

>>>

127.0.0.1

正则应该这样写,连续数组\\d+, 后面是有规律的.\\d+......, 重复需要用分组,由于分组用(),所以要强调非捕获组?:,

所以完整正则为:

import re
regex = r"\\d+(?:.\\d+)+"
test_str = ("127.0.0.1\\n"
"133.5.7.8")
regexp = re.compile(regex)
MT = regexp.findall(test_str)
print(MT)

------输出如下:

['127.0.0.1', '133.5.7.8']**

Python正则表达式问题?

常用的正则表达式元字符

元字符含义
.匹配任意一个字符
\\d一个数字
\\w可以组成word的一个字母
+次数>=1
?次数==1
*次数>=0


例。下面是学校的介绍信息,其中包含了电话号码,利用正则表达式可以很容易从这些字符中提取电话号码。

标签:

提交需求或反馈

Demand feedback