Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python正则表达式替换字符串的一部分_Python_Regex_Replace - Fatal编程技术网

使用python正则表达式替换字符串的一部分

使用python正则表达式替换字符串的一部分,python,regex,replace,Python,Regex,Replace,我有以下几行(很多): … gfnfgnfgnf:5656756734 arvervfdsa:1343453563 详情:4685685685 ERVEVERSD:34545 verveversf:7896789567 我想做的是找到“special”行(无论“:”后面是什么数字) 并将此号码替换为“111222333”。如何使用python正则表达式实现这一点 for line in input: key, val = line.split(':') if key == 'p

我有以下几行(很多):

gfnfgnfgnf:5656756734
arvervfdsa:1343453563
详情:4685685685
ERVEVERSD:34545
verveversf:7896789567

我想做的是找到“special”行(无论“:”后面是什么数字) 并将此号码替换为“111222333”。如何使用python正则表达式实现这一点

for line in input:
    key, val = line.split(':')
    if key == 'particular':
       val = '111222333'
我不确定正则表达式在这种特殊情况下是否有任何价值。我猜他们会慢一点。也就是说,这是可以做到的。这里有一个方法:

for line in input:
    re.sub('^particular : .*', 'particular : 111222333')

这其中涉及到一些微妙之处,而这几乎肯定不是您在生产代码中想要的。您需要检查所有的re模块常量,以确保正则表达式按照您期望的方式运行,等等。如果您尝试不使用re(当然,这并不是说re没有用处),您可能会惊讶于在Python中处理此类问题时所发现的灵活性;-)

确定需要正则表达式吗

other_number = '111222333'
some_text, some_number = line.split(': ')
new_line = ': '.join(some_text, other_number)
或使用sed:

sed -e 's/^particular: [0-9].*$/particular: 111222333/g' file

这里重要的一点是,如果您有很多行,您需要逐个处理它们。也就是说,你应该一次读一行,一次写一行,而不是在替换它们时读所有的行,然后再把它们写出来。(如果您实际上一次从磁盘读取一行,这将是低效的;但是,Python的IO是有能力的,它将为您缓冲文件。)


这将提高速度和内存效率。

您的sed示例迫使我说整洁

python -c "import re, sys; print ''.join(re.sub(r'^(particular:) \d+', r'\1 111222333', l) for l in open(sys.argv[1]))" file
sed -e 's/^particular: [0-9].*$/particular: 111222333/g' file
with open(...) as infile, open(...) as outfile:
    for line in infile:
        if line.startswith("particular"):
            outfile.write("particular: 111222333")
        else:
            outfile.write(line)
python -c "import re, sys; print ''.join(re.sub(r'^(particular:) \d+', r'\1 111222333', l) for l in open(sys.argv[1]))" file