0

我正在用 Python 编写脚本,我需要在文件中搜索和替换 IP....

任何想法如何实施?

4

2 回答 2

3

对于 IPv4 地址,您可以使用Regular-Expression.info提供的正则表达式。这将确保您的 IP 地址实际上是有效的。

匹配 IP 地址是在正则表达式复杂性和准确性之间进行权衡的另一个很好的例子。\b\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}\b 将匹配任何 IP 地址就好了,但也将匹配 999.999.999.999就好像它是一个有效的 IP 地址一样。这是否是一个问题取决于您打算应用正则表达式的文件或数据。要将 IP 地址中的所有 4 个数字限制为 0..255,您可以使用这个复杂的野兽:\b(25[0-5]|2[0-4][0-9]|[01]?[0 -9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25 [0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][ 0-9]|[01]?[0-9][0-9]?)\b 使用 RegexBuddy 分析这个正则表达式(所有内容都在一行上)。长正则表达式将 IP 地址的 4 个数字中的每一个存储到一个捕获组中。您可以使用这些组来进一步处理 IP 号码。

如果您不需要访问单个数字,您可以使用量词将正则表达式缩短为: \b(?:(?:25[0-5]|2[0-4][0-9]|[ 01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9 ][0-9]?)\b 用 RegexBuddy 分析这个正则表达式。同样,您可以将快速正则表达式缩短为 \b(?:\d{1,3}.){3}\d{1,3}\b 使用 RegexBuddy 分析此正则表达式

于 2012-07-02T08:20:15.527 回答
2

正则表达式!

re.sub('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}','CENSORED_IP',data)

值得注意的是,这也匹配 999.999.999.999 之类的东西。如果这是一个问题,你将不得不得到一个更复杂的正则表达式。此外,这仅适用于 IPv4 地址。

仅在有效 IP 上:

re.sub('(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)','CENSORED_IP',data)

来源:正则表达式来源

于 2012-07-02T08:13:27.500 回答