Perl 转 Python 正则表达式
怎么把这个转换成Python代码呢?这个正则表达式是用来匹配IPv4地址的,但有没有更好的方法来匹配呢?
if ($line =~ m{\s+id\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}),\s+data\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}),\s+Type Transit\s+(\d{1,2})}) { $id = "$1.$2.$3.$4"; $data = "$5.$6.$7.$8"; }
4 个回答
1
这里有一个解决方案,它改进了正则表达式,并且增加了对IP地址的验证。
import re
match = re.match(r'\s+id\s+((?:\d+\.){3}\d+),\s+data\s+((?:\d+\.){3}\d+),\s+Type Transit\s+(\d{1,2})', line)
if match:
id, data = match.group(1, 2)
# Now actually check the IP addresses.
_i, _d = id.split('.'), data.split('.')
if (len(_i) != 4 or not all(s.isdigit() and 0 <= int(s) < 256 for s in _i)
or len(_d) != 4 or not all(s.isdigit() and 0 <= int(s) < 256 for s in _d)):
# Cancel that, hit an invalid IP address
del id, data
match = None
2
用正则表达式来检查一个IP地址真的是个好主意吗?可能不是。
其实可以把这个字符串按照点分开,然后检查每一部分是不是在0到255之间的整数。这样做对电脑来说,几乎比用正则表达式解析字符串要简单得多。
另外,你可以看看这个问题的答案:如何在Python中验证IP地址? -- 有很多不错的方法可以验证IP地址,而不需要用正则表达式。(不过说实话,这个问题的至少一个答案确实提供了一个很全面的正则表达式,适用于IPv4和IPv6地址)
希望这些对你有帮助。
5
这段内容是关于编程问题的讨论,主要是在讲解一些技术细节。虽然具体的问题没有被提到,但可以看出,大家在分享自己的经验和解决方案。编程中常常会遇到各种各样的挑战,大家通过交流来找到更好的办法来解决这些问题。
在这个过程中,可能会提到一些代码示例,帮助理解具体的实现方式。代码块通常用来展示具体的代码,方便大家参考和学习。
总之,这里是一个学习和分享的地方,大家都在努力让编程变得更简单、更易懂。
match = re.search(r"\s+id\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}),\s+data\s+(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}),\s+Type Transit\s+(\d{1,2})", subject)
if match:
id = ".".join(match.group(1,2,3,4))
data = ".".join(match.group(5,6,7,8))
else:
# Match attempt failed