我想使用regexp和Python替换文件中的文本。使用sed
,我可以在命令行上执行类似的操作
sed -r 's/([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})/\1\2xx.xx/' ./input/my_file > ./output/my_file_new
基本上需要查找ip = [4个八位字节]的字符串,并将后两个替换为xx。
输入文件如下
name=rockband&ip=176.4.23.71&releasedate=none
name=rockband2&ip=121.1.44.52&releasedate=none
所需的输出文件如下
name=rockband&ip=176.4.xx.xx&releasedate=none
name=rockband2&ip=121.1.xx.xx&releasedate=none
我需要将其放入我正在使用的Python脚本中
import re
regexp = re.compile(r's/([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})/\1\2xx.xx/')
def replace(source_file_path):
fh, target_file_path = mkstemp()
with codecs.open(target_file_path, 'w', 'utf-8') as target_file:
with codecs.open(source_file_path, 'r', 'utf-8') as source_file:
for line in source_file:
print(line)
target_file.write( !! How to use sub in here )
remove(source_file_path)
move(target_file_path, source_file_path)
如何使用sub()
方法来实现我想做的事情?我需要将3个参数传递给该方法,并且只能考虑如何传递2个,我不知道第三个参数应该是什么
target_file.write(re.sub(regexp, line))
答案 0 :(得分:1)
对您的代码的最低要求为:
import re
regexp = re.compile(r'([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})')
def replace(source_file_path):
fh, target_file_path = mkstemp()
with codecs.open(target_file_path, 'w', 'utf-8') as target_file:
with codecs.open(source_file_path, 'r', 'utf-8') as source_file:
for line in source_file:
print(line)
target_file.write(regexp.sub(r'\1\2xx.xx', line))
remove(source_file_path)
move(target_file_path, source_file_path)
regexp
仅定义要匹配的内容。 sub()
争论用什么替代。
您可以调用re.sub()
,它接受三个必需的参数:要匹配的内容,要替换的内容以及要处理的字符串。或者像上面的示例一样,当您已经有预编译的正则表达式时,可以使用其sub()
方法,在这种情况下,需要说明要用什么替换以及要使用的字符串。