Python 2.7.6。 r.sub在日志文件中的IP地址之后的所有内容

时间:2014-11-20 00:36:53

标签: python python-2.7

我正在尝试学习Python中的字符串操作。如何在找到特定字符串后告诉Python替换所有文本。例如,我有我的Apache日志文件,我想替换IP地址后面的所有内容。

log_file = open('/home/Batman/Documents/python/scripts/accesslog')

for loop in log_file:
    relplacedText = re.sub(r'\d[1,3]\.\d[1,3]\.\d[1,3]\.\d[1,3]\s',r'Fire Ze Mizzles', log_file)

谢谢:)

2 个答案:

答案 0 :(得分:0)

方括号用于字符类,如[a-zA-Z]表示所有大写/小写字母。花括号用于表示匹配的长度。这里有一些实际的Apache日志字符串和匹配的例子。如果你点击" Python"页面上的按钮,您将可以尝试它。

Regex fiddle

以下内容匹配第一个IPv4地址之后的所有内容。这实际上匹配IP地址和单独捕获中的所有后续内容。您可能不需要捕获IP地址,但我想您通常会这样做。如果你看小提琴,你可以看到我也做了一个样品更换。

.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})(.*)

查看Python re docs了解详情。

答案 1 :(得分:0)

首先,方括号应为括号。取决于您的实际需求:

>>> x = "Fred 10.157.205.45, was here"
>>> print re.sub(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*', r'Fire Ze Mizzles', x)
Fred Fire Ze Mizzles
>>> print re.sub(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.*)', r'Fire Ze Mizzles\1', x)
Fred Fire Ze Mizzles, was here

这里的'。*'代表任意数量的任何东西(到最后)并将其放入()保存它以供以后使用' \ 1'构造。你可以保存前面并交换它们

>>> print re.sub(r'(.*[^0-9])\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.*)', r'\1Fire Ze Mizzles\2', x)
Fred Fire Ze Mizzles, was here
>>> print re.sub(r'(.*[^0-9])\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(.*)', r'\2 Fire Ze Mizzles \1', x)
, was here Fire Ze Mizzles Fred