我正在尝试学习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)
谢谢:)
答案 0 :(得分:0)
方括号用于字符类,如[a-zA-Z]表示所有大写/小写字母。花括号用于表示匹配的长度。这里有一些实际的Apache日志字符串和匹配的例子。如果你点击" Python"页面上的按钮,您将可以尝试它。
以下内容匹配第一个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