我正在用Python编写脚本,我需要在文件中搜索和替换IP ....
有关如何实施的任何想法?
答案 0 :(得分: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(一行中的所有内容)分析此正则表达式。长正则表达式将4个IP地址中的每一个存储到捕获组中。您可以使用这些组进一步处理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分析此正则表达式
答案 1 :(得分: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)
来源:Regex Source